Строковые литералы 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, и разница в производительности в значительной степени незначительна.

Другие вопросы по тегам