【发布时间】:2016-07-13 03:43:37
【问题描述】:
在使用数组php之前先声明数组会不会更快?
例如,先声明一个数组,然后设置一个值,是不是更快:
$arr = [];
$arr['foo'] = 'bar';
或者直接直接设置值而不先声明对象:
$arr['foo'] = 'bar';
请注意,我确实不想做以下事情:
$arr = ['foo' => 'bar'];
【问题讨论】:
标签: php
在使用数组php之前先声明数组会不会更快?
例如,先声明一个数组,然后设置一个值,是不是更快:
$arr = [];
$arr['foo'] = 'bar';
或者直接直接设置值而不先声明对象:
$arr['foo'] = 'bar';
请注意,我确实不想做以下事情:
$arr = ['foo' => 'bar'];
【问题讨论】:
标签: php
我总是声明,因为我不想遇到 undefined vars 错误。但我也很好奇。让我们测试一下!
$size = 1000000;
$start_time = microtime(true);
for($i=1;$i<=$size;$i++):
$arr = [];
$arr['foo']='bar';
unset($arr);
endfor;
$results['declare first'] =
floor((microtime(true)-$start_time) * 1000).' milliseconds';
unset($arr, $i, $start_time);
$start_time = microtime(true);
for($i=1;$i<=$size;$i++):
$arr['foo']='bar';
unset($arr);
endfor;
$results['do not declare'] =
floor((microtime(true)-$start_time) * 1000).' milliseconds';
print_r($results);
我的 PC 上的典型结果:Win 7 x64 上的 PHP 5.6.23:
[
'declare first' => '464 milliseconds',
'do not declare' => '376 milliseconds',
]
100 万次操作后 100 毫秒的差异意味着您基本上不会注意到差异,除非您拥有数百万个数组。所以先声明:-)
【讨论】:
for(): 和endfor 编写循环,我一直都在做for {}
for...endfor、if...endif、foreach...endforeach 和while...endwhile。使代码比只有右括号更容易阅读
虽然不声明对速度有好处(请参阅 BeetleJuice 的回答),但也存在很大的潜在缺点:
如果你不声明一个新数组,而创建/更新的数据 数组因任何原因而失败,然后是任何尝试使用的未来代码 该数组将 E_FATAL 因为该数组不存在。
引用自: Is it necessary to declare PHP array before adding values with []?
【讨论】:
如果您不声明新数组,并且创建/更新数组的数据因任何原因失败,那么任何尝试使用该数组的未来代码都会 E_FATAL,因为该数组不存在。
例如,如果未声明数组且未向其中添加任何值,则 foreach() 将引发错误。但是,如果数组为空,则不会发生错误,就像您声明它一样。
【讨论】: