资讯专栏INFORMATION COLUMN

关于PHP5后“默认情况下对象是通过引用传递的”思考

hosition / 3056人阅读

摘要:中的对象传递然后说一下之后的默认情况下的对象是通过引用传递的这件事情。如此时,其实表示的并不是是的引用,和可以说是没什么关系的,有关系的是实例化类得到的对象。

首先引发这篇博文的是来源于这篇帖子:https://segmentfault.com/q/10...

经过了思考之后,我决定把回答思考变成博客做一下记录,如有不对之处,欢迎指正。

指针与引用

首先,引用和指针是不一样的,指针在C语言里的概念是表示变量的地址;

引用在PHP里是表示变量2是变量1的别名,如:

$a = "hello";
$b = &$a;

此时可以说$b就是$a,$a就是$b;是同一个东西,比如你英文名叫 Steven,中文名叫 二狗子,不管叫啥,都是你。

PHP中的对象传递

然后说一下PHP5之后的“默认情况下PHP的对象是通过引用传递的这件事情。
如:

class Obj() {
    public $o = "hello";
}
$a = new Obj();
$b = $a;
$c = &$a;

此时,$b=$a其实表示的并不是$b$a的引用,$a$b可以说是没什么关系的,有关系的是实例化Obj类得到的对象。
也就是说,此时$a和$b都是实例化Obj后得到的对象,而$b=$a唯一产生的是$b$a这里得到了实例化Obj后的引用;
然后看$c = &$a
此时是$c$a的引用,也就是说$c就是$a
假设:

unset($b);
unset($c);

那么unset($b)只是删除了实例化Obj后得到的对象的一次引用计数,
unset($c)则删除了$a$b(因为两个表示同一个东西);

同样的,假设:

$a->o = "test";
echo $b->o; // string "test"

虽然说$a和$b"没什么关系",但是与实例化后的对象有关系,也就是$a改变的是实例化后的对象的数据,而$b的调用也是调用了这个对象的数据,所以从一定层面上看起来其实是有关系的。

再一个假设这样说还不明白的话,从我们web的业务逻辑来看。

用户A和用户B都登陆了网站,用户A改变了存储评论的数据表的数据,用户B假设去取这条数据,则用户B获取到就是修改后的数据,而其实用户A和用户B是没什么关系的。

而引用其实类似于用户A同时在手机端和电脑端登陆,然后改变了评论数据表的数据,不管是在手机端还是在电脑端重新获取数据都是修改过的,但是实际上就是一个人。

引用计数

我文中提到了一个引用计数的名词,这里又涉及到PHP中的另外一个问题,就是PHP的引用计数,这个可以参考PHP官方的文档,我觉得已经很详细了:
http://php.net/manual/zh/feat...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25636.html

相关文章

  • 如何让PHP性能问题不再饱受诟病

    摘要:作为开发中应用最广泛的开源脚本语言,凭借库类丰富,使用简单,安全等特点,成为和等互联网巨头和全球超过网站的主要开发语言,然而性能问题是一直以来饱受诟病的,来自开发组的高驰涛同学将为我们带来他对性能优化方面的思考和建议。 PHP作为Web开发中应用最广泛的开源脚本语言,凭借库类丰富,使用简单,安全等特点,成为Facebook和BAT等互联网巨头和全球超过70%网站的主要开发语言,然而性能...

    warnerwu 评论0 收藏0
  • php + nginx 网站并发压力测试及优化

    摘要:一测试工具压力测试工具是针对的性能测试工具,可以只安装工具。显示版本号并退出。用户名和密码由一个隔开,并以编码形式发送。参考并发数问题思考与工作原理和优化漏洞调大的并发连接数调的等。 一、测试工具: Apache 压力测试工具ab ab是针对apache的性能测试工具,可以只安装ab工具。 ubuntu安装ab apt-get install apache2-utils centos安...

    Soarkey 评论0 收藏0
  • php + nginx 网站并发压力测试及优化

    摘要:一测试工具压力测试工具是针对的性能测试工具,可以只安装工具。显示版本号并退出。用户名和密码由一个隔开,并以编码形式发送。参考并发数问题思考与工作原理和优化漏洞调大的并发连接数调的等。 一、测试工具: Apache 压力测试工具ab ab是针对apache的性能测试工具,可以只安装ab工具。 ubuntu安装ab apt-get install apache2-utils centos安...

    yeyan1996 评论0 收藏0
  • php底层原理之垃圾回收机制

    摘要:总结垃圾回收机制以的引用计数机制为基础以前只有该机制同时使用根缓冲区机制,当发现有存在循环引用的时,就会把其投入到根缓冲区,当根缓冲区达到配置文件中的指定数量后,就会进行垃圾回收,以此解决循环引用导致的内存泄漏问题开始引入该机制 php垃圾回收机制,对于PHPer来说是一个不陌生但是又不是很熟悉的内容。那么php是怎么实现对不需要的内存进行回收的呢? php变量的内部存储结构 首先还是...

    light 评论0 收藏0
  • foreach遍历过程中奇怪现象(PHP5

    摘要:中基础中的三大坑,遍历,引用机制,数组。今天我们在讲讲中的一些奇怪现象。本文适合有一定基础的。运行流程共用一个结构体开始遍历数组,进行判断,拷贝数组是一个新的结构体,操作的是新的结构体。那么遍历数组时,全程与原数组无关。 PHP中基础中的三大坑,foreach遍历,引用机制&,数组。 今天我们在讲讲foreach中的一些奇怪现象。 在讲解之前,可以先看看我其他相关的文章,属于同一个大的...

    kgbook 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<