У книги есть название, год, прочитана ли она и когда это произошло. Каждое значение имеет тип, и тип помогает программе понять, что с ним можно делать: складывать числа, проверять логическое условие или выводить строку.
Четыре типа, с которыми начнём
<?php
declare(strict_types=1);
$title = 'Левая рука тьмы'; // string
$year = 1969; // int
$isRead = true; // bool
$finishedAt = null; // null
Строка string хранит текст, целое число int — счётное значение, bool — только true или false. null означает отсутствие значения. Например, дата прочтения ещё не задана, потому что книга пока не закончена.
Числа с дробной частью имеют тип float, но для оценки книги удобнее хранить целое число от 1 до 5. Так мы избегаем вопроса, что означает оценка 4,7 и как её округлять.
Ввод из формы пока всегда строка
Когда посетитель вводит год, браузер отправляет символы. Даже если поле формы помечено как число, на стороне PHP данные запроса приходят как строки. Поэтому нельзя сразу предполагать, что $year — это int. Проверим и преобразуем значение отдельно, когда займёмся формами.
Это важное различие: тип, который пользователь прислал, и тип, с которым работает приложение, — не одно и то же. Надёжный код сначала проверяет данные, затем приводит их к ожидаемой форме.
Строгие типы и функции
Объявление типа в параметре функции сообщает, что функция ждёт. Тип результата после двоеточия говорит, что функция обязуется вернуть:
<?php
declare(strict_types=1);
function formatBookLabel(string $title, int $year): string
{
return $title . ' (' . $year . ')';
}
echo formatBookLabel('Дюна', 1965);
Если передать сюда строку вместо года, в строгом режиме PHP сообщит об ошибке типа. Это полезный сигнал: где-то рядом неверно подготовили данные. Без типов такую проблему порой обнаруживают только по неожиданному результату в интерфейсе.
strict_types применяется к скалярным типам и включается отдельно в каждом PHP-файле. Проверка зависит от файла, который вызывает функцию. Поэтому ставьте объявление в начале собственных файлов, до исполняемого кода.
Nullable и значения по умолчанию
Если книга ещё не прочитана, дата окончания может быть пустой. Запись ?string означает строку или null:
function describeReading(string $title, ?string $finishedAt): string
{
if ($finishedAt === null) {
return $title . ': ещё читаю';
}
return $title . ': закончена ' . $finishedAt;
}
Здесь используется строгое сравнение ===. Оно сравнивает и значение, и тип. Для ветвления по статусам это обычно понятнее, чем нестрогое равенство, которое может преобразовать сравниваемые значения.
Не заменяйте проверку условием «не пусто»
В PHP есть значения, которые считаются ложными в условии: например, 0, '' и null. Если ноль допустим для поля, проверка if ($rating) ошибочно сочтёт его отсутствующим. Сравнивайте именно с тем значением, которое означает отсутствие данных:
if ($finishedAt !== null) {
echo 'Дата указана';
}
Такой подход делает правило видимым в коде и не смешивает «пусто» с «нулём». Для нашего каталога это пригодится с необязательной датой и заметками.
Проверьте понимание
- Год из HTML-формы изначально приходит как строка.
null— отдельное значение, а не строка'null'.0может быть допустимым значением, поэтому не всегда годится проверка истинности.
Теперь выберем, какие книги показывать: добавим условия, пройдём список циклом и подведём простой итог.
Навигация по курсу
Часть 2 из 16.
← Часть 1: Современный PHP в 2026 году: запускаем первый проект · Часть 3: Условия и циклы в PHP: выбираем книги для каталога →
0
9