Одинарные или двойные кавычки для конкатенации переменных?

Лучше ли объединить переменную (скажем, $name) в существующую строку (скажем, $string) следующим образом:

$string='Hi, my name is '.$name

или вставить переменную в строку следующим образом:

$string="Hi, my name is $name";

или лучше использовать такую ​​функцию:

$string=sprintf("Hi, my name is %s",$name);

Что лучше с точки зрения процессорного времени/эффективности?


person ina    schedule 23.07.2010    source источник
comment
Я бы сказал, что это зависит от того, откуда поступают эти данные... пользовательский ввод или системный ввод.   -  person Prix    schedule 23.07.2010
comment
Будут ли различия в производительности? т. е. больше процессорного времени с каждым?   -  person ina    schedule 23.07.2010
comment
/me машет рукой знаменитости Дэна Гроссмана.   -  person ina    schedule 31.01.2011
comment
comment
Может быть, это зависит от того, какую систему вы используете? Одинарные кавычки были быстрее на сервере x86 olllld, который я использовал много лет назад, когда это было опубликовано.   -  person ina    schedule 17.10.2013


Ответы (10)


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

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

Итак, для производительности: используйте одинарные кавычки. Для "мне нравится мой читабельный код" - люди: двойные кавычки намного лучше для удобочитаемости, как уже указал Флавий Стеф.

Изменить: одно но: если вы собираетесь использовать один доллар в своей строке без переменной, обязательно используйте одинарные кавычки! (http://www.weberdev.com/get_example-3750.html указывает, что для разбора этих строк потребуется в 4 раза больше времени)

person Blizz    schedule 23.07.2010
comment
все, кто делал тест... источник данных? - person ina; 23.07.2010
comment
classyllama.com/development/php/php-single-vs-double -quotes procata.com/blog/archives/2005/03/08/ Вот 2. Google может дать вам гораздо больше. - person Blizz; 23.07.2010
comment
Я думаю, тест даже не требуется. Это всего лишь вопрос количества инструкций процессора. Чем меньше у вас есть (это можно легко угадать в этом случае), тем быстрее вы. - person snowflake; 23.07.2010
comment
Разбор выполняется только один раз. Для строк в двойных кавычках дополнительный анализ не производится. - person Gumbo; 23.07.2010
comment
Конечно, разбор выполняется только один раз. Но подразумеваются шаги в процессе синтаксического анализа. С двойными кавычками синтаксический анализатор должен добавить шаг интерполяции переменных в свою цепочку синтаксического анализа. - person Fidi; 23.07.2010
comment
phpbench.com - person RobertPitt; 24.01.2011
comment
Если когда-либо существовала важная причина производительности, сейчас это не имеет значения - nikic.github.io/2012/01/09/ - person user2864740; 19.09.2015
comment
Это БС. Возможно, существует лишь очень небольшая разница в производительности между использованием двойных и одинарных кавычек. Разница между ними заключается в том, что синтаксический анализатор будет использовать переменную интерполяцию в строках с двойными кавычками, но не со строками в одинарных кавычках. Так что, возможно, в очень ранние дни это могло быть разницей в производительности, но, как сказано здесь, в этом ответе выше, никогда НЕ МАЛАЯ разница. Ресурсы представляют собой рекомендации по кодированию FIG / PSR php-fig.org/psr и github.com/zikula/core/wiki/ Каковы ваши источники для этого информацию вы дали? - person Bojoer; 11.11.2016
comment
Чувак.. серьезно? Вы не только отвечаете на ответ, которому более 6 лет, вы в основном говорите то же самое. Вот что значит немного лучше: очень незначительно. - person Blizz; 12.11.2016

Разница между одинарными и двойными кавычками в PHP заключается в том, что двойные кавычки «интеллектуальны» в том смысле, что они будут анализировать переменные при чтении, в то время как одинарные кавычки «тупые» и не будут пытаться анализировать какой-либо символ в строке.

Это приводит к некоторым незначительным различиям в том, какие символы вы можете использовать; в основном, единственный символ, который вам нужно экранировать при использовании одинарных кавычек, — это сама одинарная кавычка:

'\''

Хотя, если вы используете двойные кавычки, вам нужно экранировать другие символы:

"\$"

Но это также позволяет использовать некоторые изящные вещи, такие как добавление новой строки в конец:

"my string\n"

С одинарными кавычками вам придется выполнить конкатенацию:

'my string' . chr(10)
'my string' . "\n"

Как правило, одинарные кавычки быстрее, потому что они «тупые».

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

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

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

Что касается конкатенаций: чем больше вы объединяете строки с помощью оператора точки, тем больше памяти вы будете использовать.

Учти это:

$str1 = 'asdf';
$str2 = 'qwer';

// this will result in more memory being allocated for temporary storage
echo $str1 . $str2;

// this will not allocate as much memory as the previous example
echo $str1;
echo $str2;
person thnee    schedule 23.07.2010
comment
Другой способ: echo $str1, $str2; - person nyuszika7h; 24.01.2011

Я обычно считаю, что использование интерполяции строк ("Hi, my name is $name") лучше с точки зрения удобочитаемости.

person Flavius Stef    schedule 23.07.2010

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

Одинарные кавычки, если их применять к науке о читабельности и держаться подальше от субъективности, на самом деле добавляют больше «шума». О шуме и о том, как он связан с удобочитаемостью, много говорится в книге «Чистый код», и можно сделать вывод, что чем больше пробелов вы видите, тем больше это мешает удобочитаемости. Если говорить о субъективности, то большинство мест, которые я прочитал, на самом деле предпочитают одиночные кавычки двойным кавычкам.

Используйте свое суждение.

$var = "My $string with $lots of $replacements."

Гораздо читабельнее, чем:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';

Я признаю, что:

$var = "My string.";

Выглядит почти так же, как:

$var = 'My String.';

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

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

person Tres    schedule 05.12.2012

Это не имеет значения с точки зрения синтаксиса. Оба варианта верны. Используйте то, что вам удобнее.

Лично я чувствую себя лучше при использовании $string="Hi, my name is $name", потому что вам не нужно возиться с кавычками. Просто представьте сложный SQL-запрос, скажем, с 10 переменными...

person Andrejs Cainikovs    schedule 23.07.2010

PHP довольно медленный:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-объектно-ориентированноепрограммирование-january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

Слайд №3

Так что не слишком беспокойтесь о таких небольших оптимизациях.

Однако сосредоточьтесь больше на использовании APC для кэширования вашего кода в байтовый код. Вы увидите большой прирост скорости для проекта.

person Homer6    schedule 23.07.2010

Лично, если это обычная переменная или даже свойство класса, я бы написал так:

$newVarA = "This is some text with a $variable";
$newVarB = "This is some more text, written in $settings->language";

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

$newVarC = 'This is some text from a ' . $text['random'] . ' array';

Надеюсь, это имеет смысл. Все дело в том, чтобы найти условность и придерживаться ее.

person Martin Bean    schedule 23.07.2010
comment
Ваш пример массива отлично работает без конкатенации. ... from a {$text['random']} array или ... from a $text[random] array. Вам придется использовать метод {} только в том случае, если вы ссылаетесь на многомерный массив, поскольку синтаксический анализатор PHP не является жадным. $array[x][y] будет проанализировано как <contents of $array[x]><plain text [y]>. - person Marc B; 23.07.2010
comment
да. Но я нахожу использование фигурных скобок в строках просто немного уродливым для меня. Как я уже сказал, это просто пример того, как я лично объединяю строки с переменными. - person Martin Bean; 24.07.2010

Мой девиз и ответ: предоставьте компиляторам писать машинный код. Я скажу вам, что я имею в виду...

Используйте одинарные кавычки, если вам не нужно включать переменные PHP, в противном случае используйте двойные кавычки. Не беспокойтесь о производительности, просто используйте APC на рабочих серверах. Вместо этого сосредоточьтесь на написании наиболее удобного для сопровождения кода; правильно используйте комментарии, двойные кавычки и т. д., даже если они могут замедлить код. Каждая оптимизация, которая снижает ремонтопригодность / читабельность кода, плоха, оставьте это кешировщикам кода операций и компиляторам, чтобы превратить ваш код в машинный код, не делайте этого самостоятельно ... запутывание вашего исходного кода из-за оптимизации стреляет в ответ.

person Gabor de Mooij    schedule 14.09.2011

Строка в одинарных кавычках лучше, чем строка в двойных кавычках при объединении переменных. нажмите на ссылку для лучшего понимания...

http://www.codeforest.net/php-myth-busters-using-single-quotes-on-string-is-faster-then-double-quotes

person DkPathak    schedule 09.11.2012

$string='Hi, my name is '.$name

Это лучший способ, в смысле совмещения php и html!

или вот так:

$string="Hi, my name is $name";

Это старый способ!

Или вот так:

$string=sprintf("Hi, my name is %s",$name);

Это то, что написал бы программист, перешедший из Visual Basic или других языков клиентского программирования!

Надеюсь, я был полезен.

person stooni    schedule 23.07.2010
comment
Я не согласен, что "Hi, my name is $name" старый, а что 'Hi, my name is '.$name как-то лучше! - person Josh; 24.01.2011