Следует отметить, что при использовании модифицированной версии примера Адамом Райтом с 3 переменными результаты меняются местами, и первые две функции на самом деле быстрее, последовательно. Это с PHP 7.1 на CLI:
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';
$bar = 'other words';
$bas = 3;
for ($i = 0; $i < 10000; $i++)
$t = "these are $foo, $bar and $bas";
}
function Method2()
{
$foo = 'some words';
$bar = 'other words';
$bas = 3;
for ($i = 0; $i < 10000; $i++)
$t = "these are {$foo}, {$bar} and {$bas}";
}
function Method3()
{
$foo = 'some words';
$bar = 'other words';
$bas = 3;
for ($i = 0; $i < 10000; $i++)
$t = "these are " . $foo . ", " . $bar . " and " .$bas;
}
print timeFunc('Method1', 10) . "\n";
print timeFunc('Method2', 10) . "\n";
print timeFunc('Method3', 10) . "\n";
Я также пытался использовать '3' вместо целого числа 3, но я получаю такие же результаты.
С $ bas = 3:
0.0016254
0.0015719
0.0019806
С $ bas = '3':
0.0016495
0.0015608
0.0022755
Следует отметить, что эти результаты сильно различаются (я получаю вариации около 300%), но средние значения кажутся относительно устойчивыми, и почти (9 из 10 случаев) всегда показывают более быстрое выполнение для 2 первых методов, с методом 2 всегда немного быстрее, чем метод 1.
В заключение: то, что верно для одной отдельной операции (будь то интерполяция или конкатенация), не всегда верно для комбинированных операций.