我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP中弱引用的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP中弱引用的示例分析

这篇文章主要介绍PHP中弱引用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php的框架有哪些

php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Phalcon是运行速度最快的一个PHP框架。3、Symfony,Symfony是一款为Web项目准备的PHP框架。4、Yii,Yii是一款快速、安全和专业的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的开源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能强大的PHP框架。

我们知道,PHP 中没有纯引用(指针),不管是对象,还是用引用符号 & 赋值的变量,都是对一个符号表的引用。而今天,我们要学习的是另一种引用形式:弱引用。

什么是弱引用

弱引用允许程序员保留对对象的引用,而该对象不会阻止对象被销毁;它们对于实现类似缓存的结构非常有用。

这是比较官方的解释。从这个说明中,我们可以看出,弱引用也是一种引用形式,但是,如果我们销毁了原来的对象,那么弱引用对象也会被销毁,就像普通的值对象赋值一样。

WeakReference

$obj = new stdClass;$weakref = $obj;var_dump($weakref);// object(stdClass)#1 (0) {// }unset($obj);var_dump($weakref);// object(stdClass)#1 (0) {// }$obj1 = new stdClass;$weakref = WeakReference::create($obj1);var_dump($weakref->get());// object(stdClass)#2 (0) {// }unset($obj1);var_dump($weakref->get());// NULL$weakref = WeakReference::create(new stdClass);var_dump($weakref->get());// NULL

第一个对象 \$obj 我们进行直接的赋值引用,也就是 PHP 默认的对象赋值。这时候,$weakref 保存的是对象符号表的引用。当我们 unset() 掉 $obj 时,$weakref 依然能够正常使用。也就是说,$weakref 对 $obj 原始对象的内存引用依然保持着。不管我们怎么 unset() 原始的 $obj ,都只是切断了 $obj 的引用符号表,对真正的对象没有影响,垃圾回收器也不会彻底的回收最最原始的 $obj 对象内容。

第二个对象我们使用的是 WeakReference 的 create() 方法来创建的弱引用,当我们销毁 $obj1 后,$weakref 也会变成 NULL 。这就是弱引用的作用!

它可以让垃圾回收器正常的回收,它可以避免循环引用带来的内存泄漏问题,它能让引用表现为类似于 C 中的指针操作一样。

最后一段代码是我们通过 WeakReference::create() 中直接使用 new 来创建对象。这种形式是不行的,会一直返回 NULL 。因为弱引用是通过变量来创建的,它指向的是原始对象的符号表,而变量和对象之间的符号表连接才是弱引用关心的内容,它会根据符号表的状态来判断当前的状态。如果原始对象变量切断了与符号表的连接,那么弱引用的变量也会同步切断,这样,垃圾回收器就能正常的清理这个已经没有任何引用计数的对象了。

注意

这里需要注意的是,上面的测试代码必须在 PHP7.4 及以上版本才有用,WeakReference 类是 PHP7.4 新增加的内容。之前的版本需要安装 WeakRef 这个扩展才能实现弱引用的能力,具体的内容可以查阅下方链接中的相关的文档。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%AD%A6%E4%B9%A0PHP%E5%BC%B1%E5%BC%95%E7%94%A8%E7%9A%84%E7%9F%A5%E8%AF%86.php

以上是“PHP中弱引用的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP中弱引用的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP中弱引用的示例分析

这篇文章主要介绍PHP中弱引用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php的框架有哪些php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Phal
2023-06-15

C#中.NET弱事件模式的示例分析

这篇文章主要为大家展示了“C#中.NET弱事件模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中.NET弱事件模式的示例分析”这篇文章吧。引言 你可能知道,事件处理是内存泄漏的一
2023-06-17

C++中引用的示例分析

这篇文章将为大家详细讲解有关C++中引用的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景在c/c++中,访问一个变量只能通过两种方式被访问,传递,或者查询。这两种方式是:1.通过值访问/传递变
2023-06-15

iOS中使用对象的弱引用示例代码

简介我们都知道使用 UIImage imageNamed 创建的 UIImage 对象会被持有(强引用),如果图片太大会占用内存,损耗 APP 的性能,影响用户体验,如果能改造对其的强引用变为弱引用就可以解决问题。 我们可能会有类似上面的场
2022-06-05

C++中指针引用的示例分析

这篇文章主要介绍C++中指针引用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!指针和引用形式上很好区别,但是他们似乎有相同的功能,都能够直接引用对象,对其进行直接的操作。首先,引用不可以为空,但指针可以为空
2023-06-25

引用和Threadlocal的示例分析

引用和Threadlocal的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 背景某一天在某一个群里面的某个群友突然提出了一个问题:"threadlocal的key是
2023-06-04

php中函数引用传递和返回的示例分析

小编给大家分享一下php中函数引用传递和返回的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php的引用(就是在变量或者函数、对象等前面加上&符号)在PH
2023-06-14

十分钟理解Java中的弱引用

本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:)1. What——什
2023-06-02

Python与C++引用的示例分析

本篇文章给大家分享的是有关Python与C++引用的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Python写建二叉树的代码的时候遇到了这个问题,原因就是把Pyt
2023-06-02

C++右值引用的示例分析

这篇文章主要介绍了C++右值引用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概述在C++中,常量、变量或表达式一定是左值(lvalue)或右值(rvalue)。左
2023-06-15

php中的str_replace()的示例分析

这篇文章将为大家详细讲解有关php中的str_replace()的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二
2023-06-14

PHP7引擎的示例分析

小编给大家分享一下PHP7引擎的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! PHP7将在2015年12月正式发布,PHP7 ,将会是PHP脚
2023-06-14

JavaScript引擎的示例分析

这篇文章主要介绍JavaScript引擎的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、JavaScript引擎是专门处理JavaScript脚本的虚拟机,通常附在网页浏览器上。主页浏览器JavaScri
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录