我意识到第二个避免了函数调用的开销( update ,实际上是一种语言结构),但是知道一个是否比另一个更好会很有趣。我一直在使用unset()我的大部分编码,但我最近浏览了一些在网上找到的可敬的类,它们$var = null改为使用。
unset()
$var = null
有没有首选的,原因是什么?
在 2009 年未设置的手册页中提到了这一点:
unset()就像它的名字所说的那样 - 取消设置一个变量。它不会强制立即释放内存。PHP 的垃圾收集器将在它认为合适的时候执行它 - 有意尽快,因为无论如何都不需要这些 CPU 周期,或者直到脚本耗尽内存之前,无论首先发生什么。 如果您正在这样做,$whatever = null;那么您正在重写变量的数据。您可能会更快地释放/缩小内存,但它可能会更快地从真正需要它们的代码中窃取 CPU 周期,从而导致更长的整体执行时间。
unset()就像它的名字所说的那样 - 取消设置一个变量。它不会强制立即释放内存。PHP 的垃圾收集器将在它认为合适的时候执行它 - 有意尽快,因为无论如何都不需要这些 CPU 周期,或者直到脚本耗尽内存之前,无论首先发生什么。
如果您正在这样做,$whatever = null;那么您正在重写变量的数据。您可能会更快地释放/缩小内存,但它可能会更快地从真正需要它们的代码中窃取 CPU 周期,从而导致更长的整体执行时间。
$whatever = null;
(自 2013 年以来,该unset手册页不再包含该部分)
unset
请注意,直到 php5.3,如果您在循环引用中有两个对象,例如在父子关系中,则在父对象上调用 unset() 不会释放子对象中用于父引用的内存。(当父对象被垃圾回收时,内存也不会被释放。)(错误 33595)
问题“ unset and = null 之间的区别”详细说明了一些区别:
unset($a)``$a也从符号表中删除;例如:
unset($a)``$a
$a = str_repeat('hello world ', 100); unset($a); var_dump($a);
输出:
Notice: Undefined variable: a in xxx NULL
但是什么时候$a = null使用:
$a = null
$a = str_repeat('hello world ', 100); $a = null; var_dump($a);
NULL
它似乎$a = null比它的unset()对应物快一点:更新符号表条目似乎比删除它更快。