Php 未设置与=空

Php 未设置与=空,php,Php,可能重复: 这个问题有点像是后续问题 长话短说,我自己的基准似乎与该问题给出的答案相矛盾。我的问题是。。。为什么?答案是错的还是我不明白 <?php $start = microtime(true); for ($i = 0; $i < 10000000; $i++) { $a = 'a'; $a = NULL; } $elapsed = microtime(true) - $start; echo "took $elapsed seconds\r\n";

可能重复:

这个问题有点像是后续问题

长话短说,我自己的基准似乎与该问题给出的答案相矛盾。我的问题是。。。为什么?答案是错的还是我不明白

<?php
$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    $a = NULL;
}
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds\r\n";



$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    unset($a);
}
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds\r\n";
?>

根据这一点,似乎“=null”更快

PHP 5.4结果:

  • 耗时0.88389301300049秒
  • 耗时2.1757180690765秒
PHP 5.3结果:

  • 耗时1.7235369682312秒
  • 耗时2.9490959644318秒
PHP 5.2结果:

  • 耗时3.0069220066071秒
  • 耗时4.7002630233765秒
PHP 5.1结果:

  • 耗时2.6272349357605秒
  • 耗时5.0403649806976秒
PHP5.0和4.4的情况开始有所不同

5.0:

  • 耗时10.038941144943秒
  • 耗时7.0874409675598秒
4.4:

  • 耗时7.5352551937103秒
  • 耗时6.6245851516724秒

请记住,microtime(true)在PHP 4.4中不起作用,因此我必须使用PHP.net/microtime/example#1中给出的microtime浮点数示例。

请更仔细地阅读所选答案:

如果您正在执行$whather=null;然后您正在重写变量的 数据。您可能会更快地释放/收缩内存,但它可能会占用CPU 从真正需要它们的代码中更快地循环,从而导致 更长的总体执行时间


所以,如果你所做的只是记忆,是的,那会更快。但在实际应用中,您可能会发现它会使速度减慢得更多。

OP承认了该链接,并将其作为后续发布,@yes123..@MarkReed当然,但他没有正确阅读,因此它仍然是一个副本。也许您是在用速度换取内存?也许你也应该在每个测试中记录最大内存使用量?另外,你没有真正使用PHP4.4,是吗?老实说,这对我来说没有任何意义。我的意思是,unset神奇地不执行任何汇编指令,而$whater=null;做正如给出的答案一样,它的用处就如同说“$whater=null重置缓冲区和一级缓存,而unset清除缓冲区并重置二级缓存”。Techno mumbo jumbo并不是一个答案。@ansur我认为Mark的答案的意思是:如果您反复使用同一个指针(为变量分配内存),仅此而已,那么
$var=null
会更快。我假设这是因为
unset()
将内存作业交给垃圾回收器而不是显式地清除它时(使用
$var=null
)有一些隐含的开销。
unset()
的优势在于,如果您编写的“真正的代码”不反复重复使用同一个变量,而您只是想告诉PHP“嘿,我不再需要
$var
。在有意义的时候删除它。”@Andrew,没有。
unset
$var=null
都告诉PHP不再需要
$var
的值,在有意义时删除它。所有这些都没有任何与GC的显式或隐式链接。这两者之间的唯一区别是在逻辑符号表中观察到的内容。看见