__destruct()函数的“可见性”应该是公共(public)的还是其他?我正在尝试为我的小组编写标准文档,然后出现了这个问题。

最佳答案

除了马克·比耶克的答案:

__destruct()函数必须声明为public。否则,该功能将不会在脚本关闭时执行:

Warning: Call to protected MyChild1::__destruct() from context '' during shutdown ignored in Unknown on line 0
Warning: Call to private MyChild2::__destruct() from context '' during shutdown ignored in Unknown on line 0

这可能不是有害的,而是不干净的。

但最重要的是:如果将析构函数声明为私有(private)或 protected ,则在垃圾收集器尝试释放对象的那一刻,运行时将引发致命错误:
<?php
class MyParent
{
    private function __destruct()
    {
        echo 'Parent::__destruct';
    }
}

class MyChild extends MyParent
{
    private function __destruct()
    {
        echo 'Child::__destruct';
        parent::__destruct();
    }
}

$myChild = new MyChild();
$myChild = null;
$myChild = new MyChild();

?>

输出
Fatal error: Call to private MyChild::__destruct() from context '' in D:\www\scratchbook\destruct.php on line 20

(感谢Mark Biek的出色示例!)

关于php - __破坏PHP的可见性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/230245/

10-09 08:27