Должен ли я использовать фигурные скобки или объединить переменные внутри строк? - PullRequest
43 голосов
/ 13 января 2011

Прямой вопрос: есть ли преимущество или недостаток в объединении переменных внутри строк или использовании фигурных скобок вместо этого?Фигурные скобки:

$greeting = "Welcome, {$name}!";

Лично я всегда связывал свои строки, потому что я использую UEStudio, и он выделяет переменные PHP другого цвета при объединении.Однако, когда переменная не взломана, это не так.Мне просто легче находить переменные PHP в длинных строках и т. Д.

РЕДАКТИРОВАТЬ: Люди путают это с SQL.Это не о чем этот вопрос.Я обновил свои примеры, чтобы избежать путаницы.

Ответы [ 3 ]

45 голосов
/ 13 января 2011

Все следующее делает то же самое, если вы посмотрите на вывод.

  1. $greeting = "Welcome, " . $name . "!";
  2. $greeting = 'Welcome, ' . $name . '!';
  3. $greeting = "Welcome, $name!";
  4. $greeting = "Welcome, {$name}!";

Вы не должны использовать опцию 1, используйте опцию 2.Оба варианта 3 и 4 одинаковы.Для простой переменной фигурные скобки являются необязательными.Но если вы используете элементы массива, вы должны использовать фигурные скобки;например: $greeting = "Welcome, {$user['name']}!";.Поэтому в качестве стандарта скобки используются, если используется переменная интерполяция вместо конкатенации.

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

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

3 голосов
/ 20 декабря 2011

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

Важно помнить о безопасности в начале кодирования, а не в конце, когда весь код должен быть переделан для соответствия требованиям безопасности. Или, когда вы, наконец, добьетесь этой чертовой войны «против» и поймете, что это не имеет значения, потому что вы подвержены XSS, использующему любую технику без надлежащего кодирования и проверки всех входных данных.

  1. Кодирование с использованием urlencode () или htmlenities () для нормализации ввода (-ов).
  2. Использовать типизацию данных для не-строк ИЛИ поиск по словарю и / или регулярные выражения для строк для проверки .
  3. Прибыль?
2 голосов
/ 07 мая 2015

С предварительно скомпилированным PHP (Bytecode Cache) это не имеет значения.

Эта функция поставляется с PHP 5.5 (Zend Optimizer +).

...