PHP-конкатенация или прямая вставка переменных в строку

мне интересно, каков правильный способ вставки переменных PHP в строку?

таким образом:

echo "Welcome ".$name."!"

или так:

echo "Welcome $name!"

оба этих метода работают в my PHP v5.3.5. Последнее короче и проще, но я не уверен, что первое лучше форматирование или принято как более правильное.

11 ответов


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

лично я бы пошел с вашим вторым решением в таком случае (переменной интерполяции), который мне легче писать и читать.

результат будет таким же; и даже если есть последствия для производительности, это не будет иметь значения 1.


Как sidenote, поэтому мой ответ немного более полный: день, который вы захотите сделать что-то вроде этого:--7-->

echo "Welcome $names!";

PHP будет интерпретировать ваш код, как если бы вы пытались использовать $names переменной-которая не существует.

в этот день, вам нужно использовать {}:

echo "Welcome {$name}s!"

нет необходимости использовать конкатенации.


Также обратите внимание, что ваш первый синтаксис:

echo "Welcome ".$name."!";

может быть оптимизация, избегая конкатенации, используя:

echo "Welcome ", $name, "!";

(но, как я уже сказал раньше это не имело большого значения...)


1 - Если вы не делаете сотни тысяч конкатенаций против интерполяций - и это, вероятно, не совсем так.


строки с двойными кавычками более элегантны, потому что вам не нужно разбивать строку каждый раз, когда вам нужно вставить переменную (как вы должны делать с строками с одиночными кавычками).

однако, если вам нужно вставить возвращаемое значение функции, это не может быть вставлено в строку с двойными кавычками-даже если вы окружаете ее фигурными скобками!

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";

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


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

  • использование встроенных vars в двойных кавычках может привести к сложным и запутанным ситуациям, когда вы хотите внедрить свойства объекта, многозначные массивы и т. д. То есть, как правило, при чтении встроенных vars вы не можете быть мгновенно на 100% уверены в окончательном поведение того, что Вы читаете.

  • вам часто нужно добавить костыли, такие как {} и \, что IMO добавляет путаницу и делает читаемость конкатенации почти эквивалентной, если не лучше.

  • как только вам нужно обернуть вызов функции вокруг var, например htmlspecialchars($var), вы должны переключиться на конкатенацию.

  • AFAIK, вы не можете вставлять константы.

В некоторых конкретные случаи, "двойные кавычки с встраиванием vars" могут быть полезны, но вообще говоря, я бы пошел на объединение (используя одинарные или двойные кавычки, когда удобно)


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


начиная с php4 вы можете использовать форматер строк:

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);

пойти с первым и использовать одинарные кавычки!

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

единственная ситуация, когда вы должны использовать двойные кавычки, когда вам нужно \r, \n, \t! Накладные расходы просто не стоит использовать в любом другом случае.

вы также должны проверить PHP конкатенация переменных, phpbench.com для некоторых критериев по различным методам работы.


Это только вопрос вкуса.
Используйте все, что пожелаете.

большую часть времени я использую второй, но это зависит.

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


не сцепить. Это не нужно, запятые США, поскольку echo может принимать несколько параметров

echo "Welcome ", $name, "!";

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


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

Если переменная внутри двойной кавычки PHP требует времени для разбора переменной.

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

Это еще один пример есть ли преимущество производительности одинарная цитата против двойной цитаты в php?

Я не понимаю, почему этот ответ в приведенной выше ссылке Получить upvoted и почему этот ответ получил downvote.

Как я сказал то же самое.

вы также можете посмотреть здесь

что быстрее в PHP, одинарных или двойных кавычках?


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

Лучше Синтаксис: это личное предпочтение.

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

Лучшее Использование: одиночная цитата (главным образом). Как сказал @Khez, с одной кавычкой вы можете объединить что угодно, даже вызовы функций и переменные модификация, вроде так:echo 'hi ' . trim($name) . ($i + 1);. Единственное, что double-quote может сделать, что single-quote не может сделать, это использовать \n, \r, \t и так.

читабельности: нет разницы (может применяться личное предпочтение).

Права На Запись/Восстановление Права На Запись/Отладки: в 1-строчных операторах нет разницы, но при работе с несколькими строками легче комментировать / раскомментировать строки во время отладки или записи. Для пример:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

Меньше Спасаясь: одинарная кавычка. Для одиночной цитаты вам нужно избежать только 2 символов (' и \). Для двойной цитаты вам нужно избежать 2 символов (", \) и еще 3 при необходимости ($, { и }).

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

echo 'Number ' . $i . '!';

и вам нужно увеличить 1 до $i, чтобы он стал любит:

echo 'Number ' . ($i + 1) . '!';

но для двойной цитаты вам нужно будет изменить это:

echo "Number $i!";

для этого:

echo "Number " . ($i + 1) . "!";

вывод: использовать то, что вы предпочитаете.