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]')";
Ответ 12
Второй метод - лучший. больше о переменных и типах данных PHP, которые вы можете ссылаться http://www.cikkimikki.com/2015/05/php-variables-and-data-type.html
Ответ 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) . "!";
Вывод: используйте то, что вы предпочитаете.