慕瓜9086354
这是在2009年未设置手册页:unset()做它的名字说的-取消一个变量。它不强制立即释放内存。PHP的垃圾收集器会在它认为合适的时候完成它,因为这些CPU周期无论如何都不需要,或者是在脚本耗尽内存之前,不管首先发生什么。如果你在做$whatever = null;然后重写变量的数据。您可能会更快地释放/缩小内存,但它可能会更快地从真正需要它们的代码中窃取CPU周期,从而导致更长的总体执行时间。(自2013年以来,unset手册页不要再包括那部分了)请注意,直到php5.3,如果您有循环引用中的两个对象,例如在父-子关系中,对父对象调用unset()将不会释放用于子对象中父引用的内存。(当父对象被垃圾收集时,内存也不会被释放。)虫33595)问题“未设置与=NULL之间的差异“详细说明一些不同之处:unset($a)也移除$a来自符号表;例如:$a = str_repeat('hello world ', 100);unset($a);var_dump($a);产出:Notice: Undefined variable: a in xxx
NULL但当$a = null使用:$a = str_repeat('hello world ', 100);$a = null;var_dump($a);Outputs:NULL看来$a = null比它快一点unset()相对应:更新符号表条目似乎比删除它更快。当您尝试使用不存在的unset)变量,则会触发错误,变量表达式的值将为NULL。(因为,PHP还应该做什么呢?每个表达式都需要得到一些值。)一个赋值为空的变量仍然是一个完全正常的变量。