-2 php oop destructor magic-methods php-7
a) 每次处理代码时 __destruct 都会单独运行吗
b) 或者,不,您需要使用 unset($objectName) 才能运行(另一个选项是 register_shutdown_function() )。
c) 还有其他方面与此相关吗?就像它在这个或那个时自行工作一样,你也可以使用这个或那个来让它运行,任何东西......
不,该unset()函数不是调用 的唯一方法__destruct()。根据文档,\xe2\x80\x9c 一旦没有对特定对象的其他引用,或者在关闭序列\xe2\x80\x9d 期间以任何顺序调用析构函数方法。
为了说明这一点,请考虑以下方法何时__destruct()被自动调用:
1)当类实例没有分配给任何变量时立即调用:
\n\n<?php\nnew TheClass(); #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\nRun Code Online (Sandbox Code Playgroud)\n\n2)当脚本执行停止时调用:
\n\n<?php\n$obj = new TheClass();\nexit; #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\nRun Code Online (Sandbox Code Playgroud)\n\nunset()3)当销毁类的引用时调用:
<?php\n$obj = new TheClass();\nunset($obj); #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\nRun Code Online (Sandbox Code Playgroud)\n\n4)当变量的值被重新赋值时调用:
\n\n<?php\n$obj = new TheClass();\n$obj = \'any value\'; #-> this line calls __destruct()\n\n/* More PHP Code */\n?>\nRun Code Online (Sandbox Code Playgroud)\n\n5) 当脚本完成执行时调用它:
\n\n<?php\n$obj = new TheClass();\n\n/* More PHP Code */\n\n#-> this line calls __destruct()\n?>\nRun Code Online (Sandbox Code Playgroud)\n\n6) 退出变量作用域时调用:
\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?>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |