按照官方手册的描述,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。代码演示如下
class sf
{
public function __destruct()
{
echo __METHOD__ . PHP_EOL;
}
}
$c1 = new sf;
$c2 = $c1;
echo 'unset $c2' . PHP_EOL;
unset($c2);
echo 'unset $c1' . PHP_EOL;
unset($c1);
// ----
$c1 = new sf;
$c2 = $c1;
echo 'null $c2' . PHP_EOL;
$c2 = null;
echo 'null $c1' . PHP_EOL;
$c1 = null;
// ----
$c1 = new sf;
$c2 = $c1;
echo '123 $c2' . PHP_EOL;
$c2 = 123;
echo '456 $c1' . PHP_EOL;
$c1 = 456;
echo 'the end' . PHP_EOL;
运行结果如下
unset $c2
unset $c1
sf::__destruct
null $c2
null $c1
sf::__destruct
123 $c2
456 $c1
sf::__destruct
the end