Перейти к содержимому
Теория · Строки · урок 1 из 9

Кавычки и подстановка

Чему вы научитесь

Чему вы научитесь:

  • выбирать между одинарными и двойными кавычками и подставлять переменные в строку;
  • писать многострочный текст через heredoc и nowdoc;
  • вырезать, заменять и искать кусок строки и обходить ловушку strpos;
  • форматировать числа для вывода и правильно считать длину русского текста.
Ряд буквенных плиток между двумя кавычками, пустая плитка с биркой $name и счётчик плиток 5

Почти любая программа работает с текстом: имя пользователя, адрес почты, сообщение об ошибке, страница сайта. Как вы уже знаете, текст в PHP — это строка, значение типа string.

Строку удобно представлять как ряд плиток с буквами, как в настольной игре в слова. Кавычки отмечают, где ряд начинается и где кончается.

Строку, записанную прямо в коде в кавычках, называют строковым литералом. Кавычки бывают одинарные и двойные, и работают они по-разному.

Двойные кавычки похожи на бланк с пропусками: перед печатью PHP вписывает в каждый пропуск значение. Одинарные похожи на ксерокопию: что написано, то и печатается, буква в букву. Давайте посмотрим на обе в деле:

PHP
<?php

$name = 'Anna';
echo 'Hi, ' . $name . '!', "\n"; // Hi, Anna!
echo "Hi, $name!\n"; // Hi, Anna!
echo 'Hi, $name!\n', "\n"; // Hi, $name!\n

Разберём по строкам:

  1. $name = 'Anna'; кладёт имя в переменную.
  2. Первый echo склеивает три строки точкой. Это работает, но в кавычках и точках часто путаются.
  3. Второй echo пишет то же самое одной строкой в двойных кавычках: PHP находит в ней $name и вписывает вместо него Anna.
  4. Третий 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 — табуляция;
  • \" — двойная кавычка внутри строки;
  • \$ — знак доллара, а не начало переменной;
  • \\ — обратная косая черта.
PHP
$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}. В фигурные скобки можно взять и элемент списка:

PHP
$prices = [10, 20];
echo "{$name}s\n"; // Annas
echo "First price: {$prices[0]}\n"; // First price: 10

Какие кавычки выбрать

Чем одинарные кавычки отличаются от двойных, часто спрашивают на собеседовании. Иногда к ответу добавляют, что одинарные кавычки быстрее. Это миф: PHP разбирает текст в кавычках один раз, ещё перед запуском, и разница в скорости пренебрежимо мала.

Кавычки выбирают по смыслу, а не по скорости:

  • одинарные — для текста, который печатается как есть: 'Anna', 'admin@site.ru';
  • двойные — для текста с подстановкой переменной или переводом строки "\n".

Частая ошибка

За именем переменной сразу идут буквы:

PHP
$item = 'apple';
echo "Two $items\n"; // ✗
TEXT
Warning: Undefined variable $items

PHP прочёл имя $items целиком и не нашёл такой переменной. Это предупреждение: программа идёт дальше, но в пропуск ничего не вписывается, и печатается Two с пробелом. Исправление — фигурные скобки: "Two {$item}s\n" печатает Two apples.

Главное

  • Строка в одинарных кавычках печатается как набрана; особые в ней только \' и \\.
  • В двойных кавычках PHP подставляет переменные и обрабатывает \n, \t, \", \$ и \\.
  • Фигурные скобки {$name} отмечают, где кончается имя переменной, и в вывод не попадают.
  • По скорости кавычки не различаются: одинарные берут для простого текста, двойные — для подстановки.