Строки в PHP: пошаговый разбор для начинающих
Как объявлять строки в PHP, чем отличаются кавычки, как соединять и резать текст. Разбор с примерами, которые можно запустить прямо сейчас.

К концу этого разбора вы будете понимать четыре способа объявить строку в PHP, знать, чем одинарные кавычки отличаются от двойных, и уметь соединять, обрезать и искать текст без сюрпризов вроде «почему переменная не подставилась». На всё уйдёт минут двадцать, если запускать примеры по ходу. Всё написано для PHP 8.x — на нём же и проверяйте.
Что нужно иметь до начала:
- PHP версии 8.0 или новее. Проверить: в терминале выполните
php -v— должна вывестись строка с номером версии. - Любой текстовый редактор и возможность запускать файлы
.phpиз командной строки командойphp имя_файла.php.
Отдельный веб-сервер для примеров ниже не нужен — всё работает в консоли.
Четыре способа объявить строку
В PHP строку можно записать четырьмя способами. Два из них вы будете использовать почти всегда, два — реже, но знать про них полезно.
1. Одинарные кавычки
Самый простой вариант. PHP берёт содержимое почти как есть.
<?php
$name = 'Мир';
echo 'Привет, $name'; // выведет: Привет, $name
Обратите внимание: $name не подставилось. Внутри одинарных кавычек переменные не раскрываются — вы получите текст буквально. Из спецсимволов работают только два: \' (экранированная кавычка) и \\ (обратный слэш).
2. Двойные кавычки
Здесь PHP подставляет значения переменных и обрабатывает управляющие последовательности.
<?php
$name = 'Мир';
echo "Привет, $name\n"; // выведет: Привет, Мир и перенос строки
Внутри двойных кавычек работают \n (перенос строки), \t (табуляция), \" и подстановка переменных. Если имя переменной граничит с буквами, оберните его в фигурные скобки, чтобы PHP не запутался: "{$name}_суффикс".
Правило, которое экономит нервы: если в строке нет ни переменных, ни спецсимволов — берите одинарные кавычки. Так вы сразу видите, что подстановки не будет, и случайный $ в тексте не превратится в попытку прочитать переменную.
3 и 4. Heredoc и Nowdoc
Для длинных многострочных блоков. Heredoc ведёт себя как двойные кавычки (переменные подставляются), Nowdoc — как одинарные (не подставляются).
<?php
$user = 'Анна';
// Heredoc — переменные раскрываются
$html = <<<HTML
<p>Здравствуйте, $user</p>
HTML;
// Nowdoc — текст как есть, кавычки в идентификаторе
$template = <<<'TXT'
Цена: $price рублей
TXT;
echo $html; // Здравствуйте, Анна
echo "\n";
echo $template; // Цена: $price рублей
Важная деталь синтаксиса: закрывающий идентификатор (HTML;, TXT;) в PHP 7.3 и новее можно делать с отступом, а до этого он должен был стоять в самом начале строки. Раз вы на PHP 8.x — отступ разрешён.
Соединяем строки
В PHP оператор конкатенации — точка, а не плюс. Это частая ловушка для тех, кто пришёл из JavaScript.
<?php
$first = 'Иван';
$last = 'Петров';
$full = $first . ' ' . $last; // Иван Петров
echo $full;
// Плюс здесь НЕ склеит строки, а попытается сложить как числа
echo '5' + '5'; // выведет 10, а не 55
Есть и оператор присоединения .= — он дописывает справа к уже существующей строке:
<?php
$log = 'начало';
$log .= ' середина';
$log .= ' конец';
echo $log; // начало середина конец
Длина, поиск, вырезание
Здесь начинается главная особенность PHP: большинство встроенных функций работают с байтами, а не с символами. Для латиницы и цифр это одно и то же, а для кириллицы — нет, потому что в UTF-8 русская буква занимает два байта.
Длина строки
<?php
$text = 'Привет';
echo strlen($text); // 12 — байты
echo "\n";
echo mb_strlen($text, 'UTF-8'); // 6 — символы
Для текста на русском почти всегда нужна версия с префиксом mb_ (multibyte). Держите это правило: работаете с кириллицей — ищите функцию с mb_.
Поиск подстроки
<?php
$email = 'user@example.com';
// Есть ли @ в строке? В PHP 8 удобно через str_contains
if (str_contains($email, '@')) {
echo 'Похоже на адрес';
}
// Позиция символа: strpos вернёт число или false
$pos = strpos($email, '@'); // 4
Функции str_contains, str_starts_with и str_ends_with появились в PHP 8.0. На более старых версиях их нет — там пришлось бы писать strpos($email, '@') !== false. Проверяйте именно через !== false, а не через if (strpos(...)): если подстрока стоит в самом начале, strpos вернёт 0, и обычное условие ошибочно посчитает это ложью.
Вырезание части
<?php
$date = '2024-11-15';
echo substr($date, 0, 4); // 2024 — год
echo "\n";
echo substr($date, 5, 2); // 11 — месяц
// Для кириллицы — mb_substr
$word = 'Программист';
echo mb_substr($word, 0, 7, 'UTF-8'); // Програм
Сравнение вариантов
Чтобы не гадать, что выбрать в конкретном случае, держите короткую таблицу.
| Задача | Что взять | Почему |
|---|---|---|
| Текст без переменных | Одинарные кавычки | Явно видно: подстановки нет |
| Текст с переменными | Двойные кавычки | Переменные раскрываются |
| Длина русского текста | mb_strlen | strlen считает байты, а не символы |
| Проверка «есть ли подстрока» | str_contains | Читается яснее, чем strpos !== false |
| Многострочный HTML-шаблон | Heredoc | Не надо экранировать кавычки внутри |
Если не получилось
Пять ошибок, на которые новичок натыкается в первый же день:
- Переменная выводится как текст. Видите на экране
$nameвместо значения — вы в одинарных кавычках. Замените на двойные. - Ошибка
Parse error: syntax error, unexpected .... Часто это незакрытая кавычка или кавычка того же типа внутри строки:'It's ok'ломается. Экранируйте:'It\'s ok'или возьмите двойные снаружи. substrрежет русские буквы пополам, выдавая «кракозябры». Используйтеmb_substrс указанием кодировки'UTF-8'.- Условие с поиском всегда ложно, хотя подстрока есть. Скорее всего, подстрока в начале и
strposвернул0. Сравнивайте через!== falseили переходите наstr_contains. Undefined variableвнутри двойных кавычек. PHP пытается подставить переменную, которой нет. Либо объявите её, либо, если$должен быть текстом, экранируйте:"цена \$100".
Что дальше
Следующий шаг — функции форматирования и очистки. Посмотрите sprintf для сборки строк по шаблону, trim для срезания пробелов по краям, str_replace для замены и htmlspecialchars, если строка попадает в HTML-страницу — без неё легко получить уязвимость к внедрению кода. Регулярные выражения (preg_match) оставьте на потом: они мощные, но для первых задач избыточны. Полный список строковых функций с примечаниями о версиях есть в официальной документации PHP.
Разбор научной статьи: Сложный текст — понятным языком, с терминами
Спросить за 12 ₽Источники: PHP Manual: Strings, PHP Manual: String Functions
Частые вопросы
У меня PHP 7.4, функции str_contains нет — что делать?
Почему кириллица считается неправильно и режется пополам?
Одинарные или двойные кавычки — что использовать по умолчанию?
Почему '5' + '5' дало 10, а не 55?
Что делать, если внутри строки нужен и апостроф, и кавычка?
Строка приходит из формы и попадает на страницу — есть подвох?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.