Должен ли я использовать фигурные скобки или конкатенатные переменные в строках?
Прямой вопрос: есть ли преимущество или недостаток для конкатенации переменных внутри строк или использования фигурных скобок вместо этого?
каскадный:
$greeting = "Welcome, ".$name."!";
Кудрявые фигурные скобки:
$greeting = "Welcome, {$name}!";
Лично я всегда конкатенировал свои строки, потому что я использую UEStudio, и он выделяет переменные PHP другим цветом при конкатенировании. Однако, когда переменная не разбивается, это не так. Это просто облегчает для моих глаз поиск переменных PHP в длинных строках и т.д.
РЕДАКТИРОВАТЬ: Люди путают это о существовании SQL. Это не тот вопрос, о котором идет речь. Я обновил свои примеры, чтобы избежать путаницы.
Ответы
Ответ 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';
Скользящие скобки медленнее.