我遇到以下问题。我正在使用一个类,我想在 __destructor 方法中进行一些“事件保存(和日志记录)”,我需要确保我的数据库类仍然处于事件状态,甚至我的 memcache 类仍然处于事件状态。
我注意到析构函数方法可能调用得太晚了。 (数据库类不再事件,memcache 类不再事件)
我发现的解决方法是......
$forum = new Forum_class();
$forum->output();
unset($forum) <-- unset it
这是一个好的做法吗?或者我应该跳过使用析构函数方法来执行依赖于其他事件类的操作...(可用的数据库类,可用的内存缓存类...)
我很可能不应该尽快取消设置我的数据库和内存缓存类,但对于其他类,您应该尽快取消设置它们。 (当页面上不再需要它们时)或者仅当您想使用 __destructor 函数时?
或者我做错了什么可怕的事情?总是必须确保取消类(class)设置似乎很奇怪。如果我忘记一次,我的 __destructor 方法可能会产生错误......
编辑:我想我偶然发现了这个错误 https://bugs.php.net/bug.php?id=39381 。我的数据库类和内存缓存类使用全局变量...
最佳答案
你做得对。但是...
析构函数可能会在对象的最后一个链接被销毁后调用。即使 unset($object) 也不能保证在 unset() 之后立即调用析构函数。
$forum = new Forum_class();
$forum->output();
$forumCopy = $forum;
unset($forum); // php doesnt even consider calling the destructor
unset($forumCopy); // now the destructor is going to be called... in some time
关于php - 如果我们想在 __destruct 中使用复杂的代码,我们是否应该尽快取消设置一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11486213/