好吧,就像所有“现实生活中可能更快”的问题一样,您无法通过现实生活中的测试。
function timeFunc($function, $runs)
{
$times = array();
for ($i = 0; $i < $runs; $i++)
{
$time = microtime();
call_user_func($function);
$times[$i] = microtime() - $time;
}
return array_sum($times) / $runs;
}
function Method1()
{
$foo = 'some words';
for ($i = 0; $i < 10000; $i++)
$t = "these are $foo";
}
function Method2()
{
$foo = 'some words';
for ($i = 0; $i < 10000; $i++)
$t = "these are {$foo}";
}
function Method3()
{
$foo = 'some words';
for ($i = 0; $i < 10000; $i++)
$t = "these are " . $foo;
}
print timeFunc('Method1', 10) . "\n";
print timeFunc('Method2', 10) . "\n";
print timeFunc('Method3', 10) . "\n";
给它几次运行以页面所有内容,然后...
0.0035568
0.0035388
0.0025394
因此,正如预期的那样,插值实际上是相同的(噪声水平差异,可能是由于插值引擎需要处理的额外字符)。直立串联速度约为66%,这并不大的冲击。插值解析器将查找,发现无事可做,然后以简单的内部字符串连接结束。即使 concat 很昂贵,插值器仍然必须这样做,毕竟需要解析变量并修剪/复制原始字符串。
索姆纳特的更新:
我在上面的实时逻辑中添加了Method4()。
function Method4()
{
$foo = 'some words';
for ($i = 0; $i < 10000; $i++)
$t = 'these are ' . $foo;
}
print timeFunc('Method4', 10) . "\n";
Results were:
0.0014739
0.0015574
0.0011955
0.001169
当你只是声明一个字符串,而不需要解析那个字符串,那么为什么要混淆PHP调试器来解析。我希望你明白我的观点。