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

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

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

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

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

'\''

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

"\$"

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

"my string\n"

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

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

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

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

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

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

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

Рассмотрим это:

$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;

Ответ 3

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

Ответ 4

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

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

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

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

Более читабельна, чем:

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

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

$var = "My string.";

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

$var = 'My String.';

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

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

Ответ 5

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

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

Ответ 6

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

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

Слайд # 3

Поэтому не беспокойтесь о небольших оптимизациях, подобных этим.

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

Ответ 7

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

$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';

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

Ответ 8

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

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

Ответ 10

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

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

или вот так:

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

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

Или вот так:

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

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

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