Подтвердить что ты не робот

Должен ли я использовать фигурные скобки или конкатенатные переменные в строках?

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

каскадный:

$greeting = "Welcome, ".$name."!";

Кудрявые фигурные скобки:

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

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

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

4b9b3361

Ответ 1

Все, что касается следующего, делает это, если вы посмотрите на результат.

  • $greeting = "Welcome, " . $name . "!";
  • $greeting = 'Welcome, ' . $name . '!';
  • $greeting = "Welcome, $name!";
  • $greeting = "Welcome, {$name}!";

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

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

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

Ответ 2

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

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

  • Кодировать с помощью urlencode() или htmlvents() для нормализации ввода (-ов).
  • Использовать ввод данных для нестрочных OR словарных поисков и/или регулярных выражений для строк для проверки.
  • Profit?

Ответ 3

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

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

Ответ 4

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

Пример:

$var = 'string' . $var2 . 'string2';

Скользящие скобки медленнее.