PHP - объединять или напрямую вставлять переменные в строку - PullRequest
196 голосов
/ 09 апреля 2011

Мне интересно, как правильно вставить переменные PHP в строку? Таким образом:

echo "Welcome ".$name."!"

Или вот так:

echo "Welcome $name!"

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

Ответы [ 12 ]

310 голосов
/ 09 апреля 2011

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

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

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


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

echo "Welcome $names!";

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

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

echo "Welcome {$name}s!"

Нет необходимости отступать от конкатенаций.


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

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

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

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

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


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

16 голосов
/ 09 апреля 2011

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

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

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

//the only option
$s = "Hello " . trim($world) . "!";
8 голосов
/ 11 марта 2016

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

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

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

6 голосов
/ 09 апреля 2011

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

5 голосов
/ 14 апреля 2013

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

4 голосов
/ 23 августа 2011

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

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

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

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

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

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

3 голосов
/ 09 апреля 2011

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

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

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

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

2 голосов
/ 09 апреля 2011

Не объединять. Это не нужно, запятые как echo могут принимать несколько параметров

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

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

2 голосов
/ 09 апреля 2011

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

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

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

1 голос
/ 23 марта 2019

Если вы хотите выполнить команду 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]')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...