Кавычки и подстановка
Чему вы научитесь:
- выбирать между одинарными и двойными кавычками и подставлять переменные в строку;
- писать многострочный текст через heredoc и nowdoc;
- вырезать, заменять и искать кусок строки и обходить ловушку
strpos; - форматировать числа для вывода и правильно считать длину русского текста.

Почти любая программа работает с текстом: имя пользователя, адрес почты, сообщение об ошибке, страница сайта. Как вы уже знаете, текст в PHP — это строка, значение типа string.
Строку удобно представлять как ряд плиток с буквами, как в настольной игре в слова. Кавычки отмечают, где ряд начинается и где кончается.
Строку, записанную прямо в коде в кавычках, называют строковым литералом. Кавычки бывают одинарные и двойные, и работают они по-разному.
Двойные кавычки похожи на бланк с пропусками: перед печатью PHP вписывает в каждый пропуск значение. Одинарные похожи на ксерокопию: что написано, то и печатается, буква в букву. Давайте посмотрим на обе в деле:
<?php
$name = 'Anna';
echo 'Hi, ' . $name . '!', "\n"; // Hi, Anna!
echo "Hi, $name!\n"; // Hi, Anna!
echo 'Hi, $name!\n', "\n"; // Hi, $name!\nРазберём по строкам:
$name = 'Anna';кладёт имя в переменную.- Первый
echoсклеивает три строки точкой. Это работает, но в кавычках и точках часто путаются. - Второй
echoпишет то же самое одной строкой в двойных кавычках: PHP находит в ней$nameи вписывает вместо негоAnna. - Третий
echoберёт тот же текст в одинарные кавычки и печатает его как есть: и$name, и\nостаются символами.
Одинарные кавычки
Строка в одинарных кавычках печатается так, как набрана. PHP не ищет в ней переменные и не превращает \n в перевод строки.
Особых записей внутри неё только две:
\'— апостроф, который не закрывает строку:'It\'s PHP'печатаетIt's PHP;\\— одна обратная косая черта:'C:\\temp'печатаетC:\temp.
Здесь ксерокопия перестаёт быть точной картинкой: эти две записи PHP всё-таки заменяет. Без \' апостроф в It's закончил бы строку раньше времени.
Двойные кавычки
Строку в двойных кавычках PHP заполняет, как бланк. При этом он делает две вещи.
Подстановка переменных
Каждое имя со знаком $ PHP заменяет значением переменной. Такую замену называют интерполяцией. В вывод попадает значение, а само имя — нет.
Число подставляется так же, как текст. Если в $count лежит 3, строка "$count items" даст 3 items.
Управляющие последовательности
Обратная косая черта в двойных кавычках начинает управляющую последовательность — запись, которая означает особый символ:
\n— перевод строки;\t— табуляция;\"— двойная кавычка внутри строки;\$— знак доллара, а не начало переменной;\\— обратная косая черта.
$count = 3;
echo "$count items\n"; // 3 items
echo "\$count is \"$count\"\n"; // $count is "3"Во второй строке \$ печатает знак доллара, поэтому в выводе остаётся имя $count. Следом $count без обратной косой черты заменяется на 3. Записи \" печатают кавычки и не закрывают строку.
Фигурные скобки
PHP читает имя переменной, пока за ним идут буквы, цифры или знак подчёркивания. В "Hi, $name!" имя обрывается перед !. А если сразу за именем стоят буквы, PHP прочтёт их как часть имени.
Фигурные скобки показывают, где имя кончается. Скобки в вывод не попадают: PHP заменяет значением всю запись {$name}. В фигурные скобки можно взять и элемент списка:
$prices = [10, 20];
echo "{$name}s\n"; // Annas
echo "First price: {$prices[0]}\n"; // First price: 10Какие кавычки выбрать
Чем одинарные кавычки отличаются от двойных, часто спрашивают на собеседовании. Иногда к ответу добавляют, что одинарные кавычки быстрее. Это миф: PHP разбирает текст в кавычках один раз, ещё перед запуском, и разница в скорости пренебрежимо мала.
Кавычки выбирают по смыслу, а не по скорости:
- одинарные — для текста, который печатается как есть:
'Anna','admin@site.ru'; - двойные — для текста с подстановкой переменной или переводом строки
"\n".
Частая ошибка
За именем переменной сразу идут буквы:
$item = 'apple';
echo "Two $items\n"; // ✗Warning: Undefined variable $itemsPHP прочёл имя $items целиком и не нашёл такой переменной. Это предупреждение: программа идёт дальше, но в пропуск ничего не вписывается, и печатается Two с пробелом. Исправление — фигурные скобки: "Two {$item}s\n" печатает Two apples.
Главное
- Строка в одинарных кавычках печатается как набрана; особые в ней только
\'и\\. - В двойных кавычках PHP подставляет переменные и обрабатывает
\n,\t,\",\$и\\. - Фигурные скобки
{$name}отмечают, где кончается имя переменной, и в вывод не попадают. - По скорости кавычки не различаются: одинарные берут для простого текста, двойные — для подстановки.