【发布时间】:2011-04-28 06:41:08
【问题描述】:
我正在使用 PHP 5.2。如果我在一页上新建一个对象,这个对象什么时候会被破坏?当用户转到另一个 .php 页面或我需要显式调用 __destructor 时,对象是否会自动销毁?
【问题讨论】:
我正在使用 PHP 5.2。如果我在一页上新建一个对象,这个对象什么时候会被破坏?当用户转到另一个 .php 页面或我需要显式调用 __destructor 时,对象是否会自动销毁?
【问题讨论】:
当当前脚本中不再引用对象时,所有对象都将被销毁(调用__destruct 方法)。当您 unset 包含该对象的所有变量或脚本结束时,就会发生这种情况。
【讨论】:
它将在页面加载结束时被销毁(从内存中卸载),或者如果您之前取消设置对它的所有引用。您不必手动销毁它,因为 PHP 总是在脚本结束时清理所有内存。
事实上,你应该永远自己调用__destruct。当您想销毁对象时,使用unset 取消设置对对象的引用。 __destruct 实际上不会 销毁您的对象,它只是一个函数,在销毁之前 会被 PHP 自动调用,因此您有机会在销毁之前进行清理。您可以根据需要调用 __destruct 多少次而无需恢复记忆。
但是,如果您将对象保存到会话变量中,它将“休眠”而不是被销毁。请参阅__sleep 的手册。当然,它仍然会从内存中卸载(并保存到磁盘),因为 PHP 在脚本之间不会在内存中保存任何内容。
【讨论】: