php中$this的引用计数

转载 2016年08月28日 22:04:30
在探讨php中单例模式在序列化的情形下的解决方案时,引发了一个问题,关于$this的引用计数问题


[php] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2.   
  3. class A {   
  4.     public function __construct() {  
  5.         $o = $this;  
  6.         xdebug_debug_zval('o');  
  7.     }     
  8. }  
  9.   
  10. $obj = new A();  
  11. xdebug_debug_zval('obj');  

输出结果:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. o: (refcount=4, is_ref=0)=class A {  }  
  2. obj: (refcount=1, is_ref=0)=class A {  }  

这就不是很懂了,$this的refcount是4?能想到的this,o这两个,至于obj,在construct的时候是不是已经算作一个refcount了?去掉obj再试一下


[php] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2.   
  3. class A {   
  4.     public function __construct() {  
  5.         $o = $this;  
  6.         xdebug_debug_zval('o');  
  7.     }     
  8. }  
  9.   
  10. new A();  

输出结果:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. o: (refcount=3, is_ref=0)=class A {  }  

计数减少了,说明在construct的时候,已经为将要赋值的symbol计算refcount了。那么上一个case中$this指向的对象的引用就有,this,o,obj这三个,但是refcount是4,还有一个是什么呢?

PHP5和7中的zval全介绍,内存管理,类型,引用计数(1)

转自:http://0x1.im/blog/php/Internal-value-representation-in-PHP-7-part-1.html 本文第一部分和第二均翻译自Nikita Po...
  • xuduorui
  • xuduorui
  • 2017年07月31日 19:11
  • 564

php中$this的引用计数

php中$this的引用计数问题
  • wangshiliang1990
  • wangshiliang1990
  • 2016年08月14日 00:17
  • 139

PHP5.3 的垃圾回收实现原理--同步周期回收机制(未完成版)

PHP5.3 的垃圾回收实现原理--同步周期回收机制
  • zhoutaotao123
  • zhoutaotao123
  • 2017年03月09日 16:16
  • 341

Cocos2dx中的引用计数和自动回收池

本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=126 一、引用数 引用计数是c/c++工程中一种古老的内存管理方式。Ios SDK在NSAuto...
  • qinning199
  • qinning199
  • 2013年10月19日 00:44
  • 4698

Python中的引用计数

为了跟踪记录已经分配的内存,Python做法类似于扑克牌游戏中的记牌手法。一个对象在创建时被加上一个引用。一个内部的引用记录变量将跟踪记录下每个对象有多少个引用。一个对象被创建和被赋值时,它的初始引用...
  • makethyme
  • makethyme
  • 2006年09月16日 09:36
  • 2223

linux模块引用计数

转载:http://hi.baidu.com/caosicong/item/82b94ee80110fd0f65db008c try_module_get和module_put ...
  • lipeng08
  • lipeng08
  • 2012年12月26日 18:22
  • 2054

iOS 工作之余小总结(三) 拷贝----浅拷贝,深拷贝(copy),引用计数拷贝及区别

在iOS中,我们有时要用到copy的方法。对对象进行拷贝。今天总结了一下拷贝。 1)iOS拷贝都有哪些?   拷贝有三种:浅拷贝,引用计数拷贝,深拷贝。接下来我一一总结。先码后理。   1、浅拷...
  • Fydevelop
  • Fydevelop
  • 2016年12月23日 11:32
  • 499

理解 boost::shared_ptr 中的引用计数是如何工作的

引用计数原理 指向相同资源的所有 shared_ptr 共享“引用计数管理区域”,并采用原子操作保证该区域中的引用计数值被互斥地访问。“引用计数管理区域”是指通过 new 创建的 sp_counte...
  • wohenfanjian
  • wohenfanjian
  • 2016年07月13日 17:12
  • 1698

C++ 引用计数

C++没有像java那样的垃圾回收机制,但是我们可以实现一个。一种很简单的方式就是使用引用计数。它实际上是一种用对象来管理资源的方式,因为普通的栈上的对象在离开作用域时会调用对应的析构函数,根据这个特...
  • u012501459
  • u012501459
  • 2015年10月21日 11:04
  • 1438

PHP 引用计数器 通俗版解释

PHP变量赋值底层做了什么动作,变量间赋值什么时候简单地修改引用计数器,什么时候进行变量分离? 本文给你最通俗的解释,看完一遍后完全理解~...
  • nuaazdh
  • nuaazdh
  • 2014年08月28日 11:33
  • 1459
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php中$this的引用计数
举报原因:
原因补充:

(最多只允许输入30个字)