在php中使用数组之前声明数组是否更快?

时间:2016-07-13 03:43:37

标签: php

在使用数组php之前声明数组会更快吗?

例如,声明一个数组然后设置一个值是否更快:

$arr = [];
$arr['foo'] = 'bar';

或者直接跳到设置值而不先声明对象:

$arr['foo'] = 'bar';

请注意,我想要执行以下操作:

$arr = ['foo' => 'bar'];

3 个答案:

答案 0 :(得分:5)

我总是声明,因为我不想遇到未定义的变量错误。但我也很好奇。试试吧!

$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);

我的电脑上的典型结果:Win 7 x64上的PHP 5.6.23:

[
    'declare first' =>  '464 milliseconds',
    'do not declare' => '376 milliseconds',
]

100万次操作后100毫秒的差异意味着除非你有数百万个阵列,否则你基本上不会注意到差异。首先声明: - )

答案 1 :(得分:4)

虽然没有宣布速度优势(请参阅BeetleJuice的答案),但存在很大的潜在缺点:

  

如果您未声明新阵列以及创建/更新的数据   数组因任何原因失败,然后是任何尝试使用的未来代码   数组将为E_FATAL,因为该数组不存在。

引自: Is it necessary to declare PHP array before adding values with []?

答案 2 :(得分:3)

如果您没有声明新数组,并且创建/更新数组的数据因任何原因失败,那么尝试使用该数组的任何未来代码都将为E_FATAL,因为该数组不存在。

例如,如果未声明数组并且未向其添加任何值,则foreach()将抛出错误。但是,如果数组只是空的,则不会发生错误,就像您声明它一样。