0Pricing
PHP Academy · Урок

Оператор 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 — локальная установка не требуется.

Все уроки этого курса

  1. Выражение match и именованные аргументы
  2. Оператор nullsafe и объединённые типы
  3. Перечисления (перечислимые типы)
  4. Fibers: кооперативная многозадачность
← Назад к PHP Academy