Web

PHP — объединение или прямая вставка переменных в строку

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

echo "Welcome ".$name."!"

 

Или так:

echo "Welcome $name!"

 

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

 

Ответ 1

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

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

echo "Welcome $names!"; 

 

 

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

echo "Welcome {$name}s!"

 

 

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

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

 

 

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

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

 

Ответ 2

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

// синтаксическая ошибка!!

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

 // единственный вариант

$s = "Hello " . trim($world) . "!";

 

 

Ответ 3

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

$num = 5;

$word = 'banana';

$format = 'можете ли вы произнести %d раз, слово %s ';

echo sprintf($format, $num, $word);

 

Ответ 4

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

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

Часто приходится использовать такие костыли, как {} и \, что вносит путаницу и делает читаемость конкатенации почти эквивалентной, если не лучше.

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

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

 

Ответ 5

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

Это легче читать, а значит, другие программисты будут знать, что происходит.

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

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

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

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

 

Ответ 6

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

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

mysqli_select_db($con, 'dbName')

//'ID' - поле с автоматическим инкрементом.

$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";

mysqli_query($con, $sql)

 

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

//'ID' - поле с автоматическим инкрементом.

$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

 

 

Ответ 7

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

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

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

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

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

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

            $q = 'SELECT'.

             't1.col1 '. 

             ',t2.col2 ' .

             //',t3.col ' .

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

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

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

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

             И вам нужно прирастить 1 к $i, чтобы это стало:

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

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

            echo "Number $i!";

           к этому:

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

  1. Заключение: Используйте то, что вам больше нравится.

Схожие статьи

Web

Отправка электронной почты с помощью SMTP-сервера GMail со страницы PHP

Web

Отношения Laravel: попытка получить "описание" свойства не-объекта

Web

Как и где устанавливается $ _SERVER ['APP_DEBUG'] в Symfony >= 5.1?

Как стать веб-разработчиком и что нужно знать веб-разработчику
Web

Как стать веб-разработчиком и что нужно знать веб-разработчику