php中对象,类与内存的关系

内存分为4个部分

数据段,栈段,代码段,堆段。

栈是先进后出,而且分配的内存很少,但是速度很快,通常用于保存一些标量,例如(int,string,boolean)因为这些已经知道他的内存大小,所以可以直接放到栈中。而对象,数组等一些不知道大小的变量,那么就会存放到堆内存中。

所以当我们创建数组跟对象的时候,同时也会产生一个引用,这个引用是已知大小的,所以就放在栈内存中,而实际的内容就会放在堆内存中。这就是为什么数组跟对象是引用变量。



php中对象,类与内存的关系_第1张图片


其中__construct就是这个类的构造函数,当这个类被实例化的时候,这个函数就会自动执行。而当一个类的引用断了的时候,这个在内存在就被当做垃圾,php就会执行垃圾回收机制,将这个类回收掉

php中对象,类与内存的关系_第2张图片

而当类将要被回收的时候,还会执行一个魔术函数,这个函数是__destruct

 name = $name;
		echo $this->name."这里被执行了
"; } public function __destruct() { echo $this->name."我被回收了
"; } } $p1 = new Person("张三"); $p2 = new Person("李四"); /*输出 张三这里被执行了 李四这里被执行了 李四我被回收了 张三我被回收了 */ ?>
在上面我们会发现,先被回收的是$p2而不是$p1;

这是因为$p1与$p2这两个变量是存储在栈内存中,所以当回收的时候,先进的$p1会变成后出所以才会有李四先被输出,张三在后面


你可能感兴趣的:(php学习笔记)