(假设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之间呢?
好吧,就像所有“现实生活中可能更快”的问题一样,您无法击败现实生活中的考验。
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完成。即使concat非常昂贵,在 完成 所有工作以解析出变量并修剪/复制原始字符串 之后 ,插值器仍将必须这样做。
Somnath更新:
我将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调试器来解析。我希望你明白我的意思。