Строковые литералы PHP и оптимизация компилятора
Возможный дубликат:
Есть ли в php одиночная кавычка для повышения производительности по сравнению с двойной кавычкой?
Мне интересно, если PHP-код снижает производительность при использовании "
s при определении строк, не содержащих переменных, по сравнению с '
где дополнительный анализ не выполняется.
Например, PHP попытается проанализировать переменные внутри строк, определенных "
но нет '
,
$myString = "Greetings earthlings!";
echo '$myString'; //literally outputs the string '$myString'
echo "$myString"; //literally outputs the string "Greetings earthlings"
Итак, мой вопрос, все это время я писал такой код:
echo "Greetings earthlings";
Я тратил впустую циклы? Или PHP достаточно умный / оптимизированный, чтобы понять, что я действительно имел в виду:
echo 'Greetings earthlings';
?
2 ответа
Немного работы с VLD говорит мне, что обе программы компилируются в один и тот же байт-код (используя PHP 5.3):
line # * op fetch ext return operands
---------------------------------------------------------------------------------
2 0 > ECHO 'Hello+world'
3 1 > RETURN 1
Вывод: нет абсолютно никакой разницы в современных версиях PHP. Никак нет. Используйте то, что вам больше нравится.
Однако существует разница между echo "Hello $world"
:
compiled vars: !0 = $world
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > ADD_STRING ~0 'Hello+'
1 ADD_VAR ~0 ~0, !0
2 ECHO ~0
3 > RETURN null
А также echo "Hello " . $world
:
compiled vars: !0 = $world
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > CONCAT ~0 'Hello+', !0
1 ECHO ~0
2 > RETURN null
Я бы не стал называть это значительным, хотя. Фактическая разница в производительности в реальном мире, по всей вероятности, тривиальна.
Можно запустить тесты, чтобы увидеть. Я сделал для PHP 4 и обнаружил, что выполнение конкатенации строк было гораздо быстрее (на порядок? Я точно не помню), чем встроенные переменные. Для сравнения, простые строки в двойных кавычках были лишь немного быстрее, чем одинарные.
Но это было для PHP 4. Я запустил те же тесты позже для PHP 5, и разница в производительности в значительной степени незначительна.