PHP5的对象传递和垃圾回收机制
2013-02-04 18:28
323 查看
PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval中(在PHP4中对象和一般变量一样存储于Zval)。在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一.. 对象传递PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval中(在PHP4中对象和一般变量一样存储于Zval)。在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给一个函数时,我们不需要复制数据。仅仅保持相同的对象指针并由另一个zval通知现在这个特定的对象指向的Object Store。由于对象本身位于Object Store,我们对它所作的任何改变将影响到所有持有该对象指针的zval结构----表现在程序中就是目标对象的任何改变都会影响到源对象。.这使PHP对象看起来就像总是通过引用(reference)来传递,因此PHP中对象默认为通过“引用”传递,你不再需要像在PHP4中那样使用&来声明。垃圾回收机制某些语言,最典型的如C,需要你显式地要求分配内存当你创建数据结构。一旦你分配到内存,就可以在变量中存储信息。同时你也需要在结束使用变量时释放内存,这使机器可以空出内存给其它变量,避免耗光内存。PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。例如:
<?php
class
Person
{
}
function
sendEmailTo
(){
}
$haohappy
=new
Person
( );
//
建立一个新对象
:
引用计数
Reference count =1
$haohappy2
=
$haohappy
;
//
通过引用复制
:Reference count =2
unset(
$haohappy
);
//
删除一个引用:
Reference count =1
sendEmailTo
(
$haohappy2
);
//
通过引用传递对象:
//
在函数执行期间:
// Reference count =2
//
执行结束后
:
//Reference count =1
unset(
$haohappy2
);
//
删除引用
: Reference count =0
自动释放内存空间
?>
相关文章推荐
- java gc垃圾回收机制主要回收堆内的对象
- 总结: 十分钟理解 Java 对象生存期与JVM垃圾回收机制
- PHP5和PHP7的垃圾回收机制有什么不同
- java垃圾回收策略及对象管理机制
- 对JVM中垃圾回收机制的个人理解--对象的生命周期
- 对象的销毁与垃圾回收机制
- jvm垃圾回收机制(二)算法和如何进行判断对象是否回收实例
- JVM 垃圾回收机制( 一) 回收对象的判定
- 垃圾回收机制中,引入计数是如何实现的,内部原理是什么,怎么维持对象引用的
- 对象引用JAVA 各种reference和垃圾回收机制
- 关于今天面试回答的不好的两个问题(垃圾回收机制和对象的排序)
- java实现面向对象和javaScript基于对象的区别&java垃圾回收机制和其他编程语言的比较
- 研究垃圾回收机制,计算对象创建占用的内存
- java的对象与垃圾回收机制
- session的垃圾回收机制
- 浅谈Flash的垃圾回收机制
- Java垃圾回收机制
- .Net 垃圾回收机制原理(二)
- JVM的垃圾回收机制详解和调优
- 对象的回收机制深度剖析