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


Is it faster to declare array before using the array in php?

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

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

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

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

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

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

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

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

$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 5.6.23 x64 上的 PHP 7

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

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

虽然不声明有速度优势(参见BeetleJuice的答案),但有一个很大的潜在缺点:

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

引自:在用 [] 添加值之前,是否需要声明 PHP 数组?

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

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