Существует ли разница в скорости между, скажем:
$ 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 и т. д.), а при использовании одинарных кавычек он не анализирует переменные или специальные символы, поэтому может быть небольшое увеличение скорости.
Почему бы вам не проверить его и сравнить разницу? Числа не лгут, если вы обнаружите, что один лучше, чем другой, тогда вы должны спросить, почему.
нет НИКАКОЙ разницы, периода. 😉