我正在 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() 只有在没有更多引用时才会被销毁。
请记住,第二次循环时,会重复相同的过程。内存中的新空间被分配给 new Dog(),然后该内存的地址再次赋予 $dog
。第二次创建消息。
现在原来的狗没有指向它的引用,因此可以将其销毁。首先销毁消息。
按照相同的过程,您应该明白为什么其余消息会这样读出。
关于php - php 中构造函数/析构函数行为的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252045/