Конкатенация строк PHP – «$ a $ b» против $ a. "". $ b – производительность

Существует ли разница в скорости между, скажем:

$ newstring = "$ a и $ b вышли, чтобы увидеть $ c";

а также

$ newstring = $ a. " а также " . $ b. «вышел посмотреть». $ С;

и если да, то почему?

В зависимости от версии PHP она зависит от того, насколько вторая быстрее, если вы пишете ее так: $newstring = $a . ' and ' . $b . ' went out to see ' . $c; $newstring = $a . ' and ' . $b . ' went out to see ' . $c;

PHP очень несовместим с версией и версией и строит для того, чтобы строить, когда дело доходит до производительности, вы должны проверить ее для себя. Нельзя сказать, что это также зависит от типа $a , $b и $c , как вы можете видеть ниже.

Когда вы используете " , PHP анализирует строку, чтобы увидеть, есть ли в ней какая-либо переменная / заполнители, но если вы используете только ' PHP рассматривает ее как простую строку без какой-либо дальнейшей обработки. Поэтому обычно ' должно быть быстрее». в теории. На практике вы должны проверить.


Результаты (в секундах):

 a, b, c are integers: all inside " : 1.2370789051056 split up using " : 1.2362520694733 split up using ' : 1.2344131469727 a, b, c are strings: all inside " : 0.67671513557434 split up using " : 0.7719099521637 split up using ' : 0.78600907325745 <--- this is always the slowest in the group. PHP, 'nough said 

Использование этого кода с Zend Server CE PHP 5.3:

 <?php echo 'a, b, c are integers:<br />'; $a = $b = $c = 123; $t = xdebug_time_index(); for($i = 1000000; $i > 0; $i--) $newstring = "$a and $b went out to see $c"; $t = xdebug_time_index() - $t; echo 'all inside " : ', $t, '<br />'; $t = xdebug_time_index(); for($i = 1000000; $i > 0; $i--) $newstring = $a . " and " . $b . " went out to see " . $c; $t = xdebug_time_index() - $t; echo 'split up using " : ', $t, '<br />'; $t = xdebug_time_index(); for($i = 1000000; $i > 0; $i--) $newstring = $a . ' and ' . $b . ' went out to see ' . $c; $t = xdebug_time_index() - $t; echo 'split up using \' : ', $t, '<br /><br />a, b, c are strings:<br />'; $a = $b = $c = '123'; $t = xdebug_time_index(); for($i = 1000000; $i > 0; $i--) $newstring = "$a and $b went out to see $c"; $t = xdebug_time_index() - $t; echo 'all inside " : ', $t, '<br />'; $t = xdebug_time_index(); for($i = 1000000; $i > 0; $i--) $newstring = $a . " and " . $b . " went out to see " . $c; $t = xdebug_time_index() - $t; echo 'split up using " : ', $t, '<br />'; $t = xdebug_time_index(); for($i = 1000000; $i > 0; $i--) $newstring = $a . ' and ' . $b . ' went out to see ' . $c; $t = xdebug_time_index() - $t; echo 'split up using \' : ', $t, '<br />'; ?> 

Вероятно, будет разница в скорости, так как это два разных синтаксиса. То, что вам нужно спросить, – это разница важна. В этом случае нет, я не думаю, что вам нужно беспокоиться. Разница была бы слишком незначительной.

Я бы порекомендовал вам делать то, что имеет для вас смысл. « $a and $b went out to see $c », может быть немного запутанным, если смотреть на него. Если вы хотите пойти по этому маршруту, я бы предложил фигурные скобки вокруг ваших переменных: « {$a} and {$b} went out to see {$c} ".

Я сделал быстрый тест, и, как говорили другие, результаты были очень непоследовательными. Я не заметил увеличения производительности, используя одиночные кавычки вместо двойных. Я предполагаю, что все сводится к предпочтению.

Вы можете захотеть придерживаться одного типа цитат для вашего стиля кодирования, и если вы это сделаете, выберите двойные кавычки. Функция замены пригодится чаще, чем вы думаете.

Я поставил контрольный код на github .

Если вас беспокоит скорость конкатенации строк на этом уровне, вы используете неправильный язык. Скомпилируйте приложение в C для этого случая использования и вызовите это в своем PHP-скрипте, если это действительно является узким местом.

Да, однако, разница очень незначительна между

 $newstring = "$a and $b went out to see $c"; 

а также

 $newstring = $a . " and " . $b . " went out to see " . $c; 

Если вы использовали:

 $newstring = $a . ' and ' . $b . ' went out to see ' . $c; 

Разница была бы немного больше (но, вероятно, все еще незначительна), причина в том, что если я правильно помню (возможно, я ошибаюсь), PHP проверяет и анализирует содержимое в двойных кавычках для переменных и специальных символов (\ t, \ n и т. д.), а при использовании одинарных кавычек он не анализирует переменные или специальные символы, поэтому может быть небольшое увеличение скорости.

Почему бы вам не проверить его и сравнить разницу? Числа не лгут, если вы обнаружите, что один лучше, чем другой, тогда вы должны спросить, почему.

нет НИКАКОЙ разницы, периода. 😉