我在PHP 中运行一个简单的构造函数/析构函数程序
为什么输出以两行开始
创建了狗0
创建的狗1
什么时候应该是
创建了狗0
被摧毁的狗0
<?php
class dog{
public $name;
public function __construct($name){
$this->name = $name;
echo "created dog $name <br/>";
}
public function __destruct()
{
echo "destroyed dog $this->name <br/>";
}
}
for($i = 0;$i<=2;$i++)
{
$dog = new dog($i);
}
$dog = new dog("last");
?>
全输出
created dog 0
created dog 1
destroyed dog 0
created dog 2
destroyed dog 1
created dog last
destroyed dog 2
destroyed dog last
从for循环的第一次迭代开始。在幕后,内存中有一个空间被分配来容纳一个Dog((对象。
然后,一个新的变量$dog
被分配到内存中Dog((地址的指针/引用。我们看到了第一条创建的消息。
现在我们知道,只有当没有更多引用时,第一个Dog((才会被销毁
记住,第二次通过循环时,重复相同的过程。内存中的一个新空间被分配给一个新的Dog((,然后该内存的地址再次被赋予$dog
。第二个创建消息。
现在,原来的狗没有指向它的引用,所以它可以被销毁。首先销毁消息。
按照同样的过程,你应该知道为什么其余的消息会像它们一样读出。