__destruct 是由它自己运行还是我需要使用 unset() 或 register_shutdown_function() 才能使其工作

-2 php oop destructor magic-methods php-7

a) 每次处理代码时 __destruct 都会单独运行吗

b) 或者,不,您需要使用 unset($objectName) 才能运行(另一个选项是 register_shutdown_function() )。

c) 还有其他方面与此相关吗?就像它在这个或那个时自行工作一样,你也可以使用这个或那个来让它运行,任何东西......

Vic*_*tor 5

不,该unset()函数不是调用 的唯一方法__destruct()。根据文档,\xe2\x80\x9c 一旦没有对特定对象的其他引用,或者在关闭序列\xe2\x80\x9d 期间以任何顺序调用析构函数方法。

\n\n

为了说明这一点,请考虑以下方法何时__destruct()自动调用:

\n\n

1)当类实例没有分配给任何变量时立即调用:

\n\n
<?php\nnew TheClass(); #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

2)当脚本执行停止时调用:

\n\n
<?php\n$obj = new TheClass();\nexit; #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

unset()3)当销毁类的引用时调用:

\n\n
<?php\n$obj = new TheClass();\nunset($obj); #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

4)当变量的值被重新赋值时调用:

\n\n
<?php\n$obj = new TheClass();\n$obj = \'any value\'; #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

5) 当脚本完成执行时调用它:

\n\n
<?php\n$obj = new TheClass();\n\n/* More PHP Code */\n\n#-> this line calls __destruct()\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

6) 退出变量作用域时调用:

\n\n
<?php\ncall_user_func(function() {\n    $obj = new TheClass();\n\n    /* More PHP Code */\n\n    return true; #-> this line calls __destruct()\n});\n\n/* More PHP Code */\n?>\n
Run Code Online (Sandbox Code Playgroud)\n