Оператор nullsafe и объединённые типы
Используйте ?-> для безопасной цепочки вызовов с объектами, допускающими значение null, и объявляйте подсказки объединённых типов
«Оператор nullsafe и объединённые типы» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Оператор nullsafe
В PHP 8.0 появился оператор ?->. Если левая часть равна null, вся цепочка прекращается и возвращает null, не вызывая ошибку.
Решаемая проблема
Без оператора nullsafe для объединения вызовов объектов, допускающих значение null, требуются многословные проверки на null.
<?php
// Old way:
$city = null;
if ($user !== null && $user->getAddress() !== null) {
$city = $user->getAddress()->getCity();
}
// PHP 8 nullsafe:
$city = $user?->getAddress()?->getCity();Оператор nullsafe с вызовами методов
Каждый оператор ?-> в цепочке проверяется независимо. Первое значение null прекращает выполнение оставшейся части.
<?php
$name = $order?->getCustomer()?->getName() ?? "Guest";Оператор nullsafe со свойствами
Он также работает с обращением к свойствам.
<?php
$zip = $user?->address?->zip;Оператор nullsafe не пропускает побочные эффекты
Если цепочка с оператором nullsafe прекращается, последующие вызовы методов в цепочке не выполняются — побочные эффекты не возникают.
Объединение типов
Объединение типов в PHP 8.0 позволяет объявить, что параметр, свойство или возвращаемое значение принимает один из нескольких типов.
<?php
function formatId(int|string $id): string {
return (string) $id;
}Примеры объединения типов
Распространённые объединения типов на практике:
<?php
function process(int|float $amount): float {
return (float) $amount;
}
function findUser(int|string $idOrEmail): ?User {
// search by ID or email
}Типы, допускающие null
?Type — сокращённая запись для Type|null: значение может иметь указанный тип или быть равно null.
<?php
function greet(?string $name): string {
return "Hello, ".($name ?? "stranger");
}null в объединении типов
Можно явно включить null в объединение типов: int|string|null.
Пересечение типов (PHP 8.1)
В PHP 8.1 появились пересечения типов (A&B): значение должно одновременно удовлетворять всем типам. Это полезно для типобезопасного внедрения зависимостей.
<?php
function process(Iterator&Countable $collection): void {
// $collection must be both Iterator AND Countable
}Приведение типов и strict_types
Без declare(strict_types=1) PHP может приводить значения к нужному типу (например, "42" к 42). В строгом режиме принимаются только значения точно соответствующего типа.
Итоги
Оператор nullsafe (?->) устраняет повторяющиеся проверки на null в цепочках. Объединения типов (int|string) позволяют создавать гибкие, но типобезопасные сигнатуры функций.
Быстрая проверка
Что возвращает оператор nullsafe, если метод в цепочке возвращает null?
Часто задаваемые вопросы
Урок «Оператор nullsafe и объединённые типы» бесплатный?
Да — полный текст урока «Оператор nullsafe и объединённые типы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Оператор nullsafe и объединённые типы»?
Используйте ?-> для безопасной цепочки вызовов с объектами, допускающими значение null, и объявляйте подсказки объединённых типов Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Оператор nullsafe и объединённые типы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выражение match и именованные аргументы
- Оператор nullsafe и объединённые типы
- Перечисления (перечислимые типы)
- Fibers: кооперативная многозадачность