【发布时间】:2022-01-25 23:56:46
【问题描述】:
我正在经历将我们的约会网络应用程序更新到 PHP 7+ 以上的过程
感谢本网站的帮助,我一直在更新已弃用的代码并消除出现的错误,并且对我们已弃用的 __destruct() 函数有疑问。
我搜索了我遇到的错误,并在 github 上找到了解决我问题的链接:https://github.com/sajari/simple-linkedin-php/issues/4
所以据说 destruct 函数在 PHP 7 之后中断,并且将它们注释掉确实解决了我的问题,但这让我很担心。
编辑:Destruct 仍然有效,这正是我过时的代码尝试的方式 使用它
我在我们的一个类文件中调用了 destruct 的一个特定实例,该类文件根据用户从我们的数据库中查询的作业构建作业请求页面。
/** free up memory
$tmp->__destruct();
unset($tmp);
**/
据我所知,一切正常,但我想知道这样做的后果是什么。我应该用一些更新的内存清理方法替换它吗?这个应用程序已经过时了,我想知道是否还需要进行这种清理,或者故意放入以阻止内存泄漏。我的老板似乎也不知道。
从专业角度来说,我是 PHP 新手,希望确保此更新仍能为我们的客户提供相同水平的速度和可用性。
这里提出的另一个 stackoverflow 问题:Deletion of a PHP object; also unset() and __destruct
用户回答说,脚本的完整执行已经清除了这些值,但是可以明确清除以停止任何无意的引用。
这只会导致更多问题。当那个用户指的是脚本时,他们指的是特定的函数调用吗?
总结一下,假设 destruct 和 unset 调用是为了阻止内存泄漏,它的等效替代品是什么?
谢谢!
为了我自己,我想亲自将此问题标记为已回答。它 非常有帮助!
【问题讨论】:
-
__destruct()在 PHP7 中没有被删除或破坏,但他们在您链接的 GitHub 问题中使用它的方式不是正确的使用方式。在我的 IDE 中,他们的代码中的错误是Cannot reassign $this,因为unset($this);没有任何意义。但是,不需要调用$tmp->__destruct(),因为unset($tmp)会自动运行它。请参阅php.net/manual/en/language.oop5.decon.php 了解更多信息。 -
嘿,我刚刚测试了该修复程序,现在一切似乎都运行良好。我不知道为什么会这样写,因为我不是原作者。我想更新我的问题,因为我仍然想知道是否需要明确的 unset 调用。
标签: php