Что ж, как и во всех вопросах «Что может быть быстрее в реальной жизни», вы не можете пройти тест в реальной жизни.
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 был дорогим, интерполятору все равно придется это делать, после всей работы, чтобы разобрать переменную и обрезать / скопировать исходную строку.
Обновления по Сомнатху:
Я добавил 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-отладчик для анализа. Я надеюсь, вы поняли мою точку зрения.