【问题标题】:Is it faster to declare array before using the array in php?在php中使用数组之前声明数组会更快吗?
【发布时间】:2016-07-13 03:43:37
【问题描述】:

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

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

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

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

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

请注意,我确实想做以下事情:

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

【问题讨论】:

    标签: php


    【解决方案1】:

    我总是声明,因为我不想遇到 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 毫秒的差异意味着您基本上不会注意到差异,除非您拥有数百万个数组。所以先声明:-)

    【讨论】:

    • 这不是苹果对苹果的比较,因为您在第一个块的每次迭代中都声明了数组,但只(隐式)在第二个块中声明了一次。一个有效的测试将涉及放置“unset ($arr['foo']);”在“$arr['foo']='bar';”下在两个区块中。
    • 我什至不知道你可以用for():endfor 编写循环,我一直都在做for {}
    • @BenShoval 你是对的!谢谢。我编辑了测试,确认了之前的结果。但是,百分比方面的差异并不明显
    • @ZachPanzarino 我喜欢使用for...endforif...endifforeach...endforeachwhile...endwhile。使代码比只有右括号更容易阅读
    • 我感觉正好相反,括号对我来说更容易识别代码块
    【解决方案2】:

    虽然不声明对速度有好处(请参阅 BeetleJuice 的回答),但也存在很大的潜在缺点:

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

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

    【讨论】:

    • 该答案并未声称没有速度优势。事实上,测试表明情况正好相反(见我的回答)。尽管如此,我还是提倡声明。
    • @BeetleJuice - 感谢您根据我的评论修改您的答案。你显然是正确的。我已更改答案以反映这一点。
    【解决方案3】:

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

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

    【讨论】:

    • 好信息,但它没有回答 OP 关于速度的问题:“在使用数组 php 之前声明数组是否更快?”
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 2011-04-11
    • 2012-01-04
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多