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

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

Этот способ:

echo "Welcome ".$name."!"

Или так:

echo "Welcome $name!"

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

Ответ 1

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

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

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


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

echo "Welcome $names!";

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

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

echo "Welcome {$name}s!"

Не нужно отступать от конкатенаций.


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

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

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

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

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


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

Ответ 2

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

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

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

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

Ответ 3

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

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

Источник: sprintf()

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

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

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

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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

Ответ 9

Не конкатенация. Это не нужно, мы запятыми, поскольку эхо может принимать несколько параметров

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

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

Ответ 10

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

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

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

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

Я не понял, почему этот ответ в ссылке выше, и почему этот ответ получил downvote.

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

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

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

Ответ 11

Если вы хотите выполнить команду SQL, а ваши переменные являются членами массива, вам не следует использовать одинарные кавычки внутри [] массива (например: ['']); например, если вы используете эту строку в качестве команды SQL, вы получите server error 500:

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

Правильная строка:

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

Ответ 13

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

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

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

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

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

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

$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) . "!";

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