在php5中使用内联字符串与串联的速度差异?

在php5中使用内联字符串与串联的速度差异?

(假设php5)考虑

<?php

    $foo = 'some words';

    //case 1
    print "these are $foo";

    //case 2
    print "these are {$foo}";

    //case 3
    print 'these are ' . $foo;?>

1和2之间有很大差异吗?

如果没有,那么在1/2和3之间呢?


慕村225694
浏览 271回答 3
3回答

米脂

好吧,就像所有“现实生活中可能更快”的问题一样,你无法击败现实生活中的考验。function&nbsp;timeFunc($function,&nbsp;$runs){ &nbsp;&nbsp;$times&nbsp;=&nbsp;array(); &nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;$runs;&nbsp;$i++) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$time&nbsp;=&nbsp;microtime(); &nbsp;&nbsp;&nbsp;&nbsp;call_user_func($function); &nbsp;&nbsp;&nbsp;&nbsp;$times[$i]&nbsp;=&nbsp;microtime()&nbsp;-&nbsp;$time; &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;array_sum($times)&nbsp;/&nbsp;$runs;}function&nbsp;Method1(){&nbsp; &nbsp;&nbsp;$foo&nbsp;=&nbsp;'some&nbsp;words'; &nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;10000;&nbsp;$i++) &nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;"these&nbsp;are&nbsp;$foo";}function&nbsp;Method2(){ &nbsp;&nbsp;$foo&nbsp;=&nbsp;'some&nbsp;words'; &nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;10000;&nbsp;$i++) &nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;"these&nbsp;are&nbsp;{$foo}";}function&nbsp;Method3() &nbsp;{ &nbsp;&nbsp;$foo&nbsp;=&nbsp;'some&nbsp;words'; &nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;10000;&nbsp;$i++) &nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;"these&nbsp;are&nbsp;"&nbsp;.&nbsp;$foo;}print&nbsp;timeFunc('Method1',&nbsp;10)&nbsp;.&nbsp;"\n";print&nbsp;timeFunc('Method2',&nbsp;10)&nbsp;.&nbsp;"\n";print&nbsp;timeFunc('Method3',&nbsp;10)&nbsp;.&nbsp;"\n";给它几个运行页面,然后......0.00355680.00353880.0025394因此,正如预期的那样,插值几乎相同(噪声水平差异,可能是由于插值引擎需要处理的额外字符)。直线连接约为速度的66%,这并不是很大的震撼。插值解析器将查找,无需执行任何操作,然后使用简单的内部字符串concat完成。即使concat很昂贵,插值器仍然必须这样做,在解析变量并修剪/复制原始字符串的所有工作之后。Somnath的更新:我将Method4()添加到上面的实时逻辑中。function&nbsp;Method4() &nbsp;{ &nbsp;&nbsp;$foo&nbsp;=&nbsp;'some&nbsp;words'; &nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;&nbsp;$i&nbsp;<&nbsp;10000;&nbsp;$i++) &nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;'these&nbsp;are&nbsp;'&nbsp;.&nbsp;$foo;}print&nbsp;timeFunc('Method4',&nbsp;10)&nbsp;.&nbsp;"\n";Results&nbsp;were:0.00147390.00155740.00119550.001169当你只是声明一个字符串而不需要解析那个字符串时,为什么要混淆PHP调试器来解析。我希望你明白我的观点。
打开App,查看更多内容
随时随地看视频慕课网APP