从随机的php.net帖子中:
如果您正在执行$ whatever = null; 那么您正在重写变量的数据。您可能会更快地释放/缩小内存,但可能会从真正需要它们的代码中窃取CPU周期,从而导致更长的总体执行时间。
显然,这是无可争辩的真理,所以也许有人会乐于解释。
我的意思是,什么unset神奇地不会执行任何汇编指令,而会$whatever = null;执行?给出的答案和说出来的一样有用
unset
$whatever = null;
$ whatever = null会重置缓冲区和L1缓存,而unset会清除缓冲区并重置L2缓存。
Techno Mumbo巨无霸无法解决。
两种方法之间的重要区别是,它们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()同等程序快大约6%。似乎更新符号表条目比删除它更快。
unset()
附录
另一个区别(如该小脚本所示)似乎是每次调用后恢复多少内存:
echo memory_get_usage(), PHP_EOL; $a = str_repeat('hello world ', 100); echo memory_get_usage(), PHP_EOL; // EITHER unset($a); OR $a = null; echo memory_get_usage(), PHP_EOL;
在使用时,unset()除64个字节的内存外,其他$a = null;所有内存均被返还,而272个字节的内存则全部释放。我没有足够的知识来知道为什么两种方法之间都存在208字节的差异,但是仍然存在差异。
$a = null;