php中出现这种构造函数/析构函数行为的原因是什么


what is the reason for this constructor/destructor behaviour in php?

我在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。第二个创建消息。

现在,原来的狗没有指向它的引用,所以它可以被销毁。首先销毁消息。

按照同样的过程,你应该知道为什么其余的消息会像它们一样读出。