Конкатенация строк PHP - "$ a $ b" против $ a. "" $ b - производительность - PullRequest
4 голосов
/ 28 ноября 2009

Есть ли разница в скорости, скажем:

$ newstring = "$ a и $ b вышли посмотреть на $ c";

и

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

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

Ответы [ 7 ]

16 голосов
/ 28 ноября 2009

В зависимости от версии PHP, это зависит от того, насколько быстрее будет секунда, если вы напишите это следующим образом: $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 />';

?>
6 голосов
/ 28 ноября 2009

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

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

2 голосов
/ 28 ноября 2009

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

2 голосов
/ 28 ноября 2009

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

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

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

1 голос
/ 28 ноября 2009

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

1 голос
/ 28 ноября 2009

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

очень незначительная
$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 и т. д.) и при использовании одинарных кавычек не обрабатывает переменные или специальные символы, поэтому скорость может немного увеличиться.

0 голосов
/ 29 ноября 2009

разницы нет, точка. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...