Класс Laravel Optional и сопровождающий его необязательный помощник были представлены в Laravel 5.5. Этот класс полезен, чтобы избежать этих надоедливых ошибок Trying to get property of non-object в вашем коде.

$city = optional(optional($user)->getAddress())->city

До PHP 8.0

$city = null;
if($user !== null) {
    $address = $user->getAddress();
    if($address !== null) {
        $city = $address->city;
    }
}

PHP 8 позволяет вам написать это:

$foo?->bar?->baz;

Безопасный нулевой оператор незаметно возвращает null, если выражение слева оценивается как null.

Но стоп

var_dump($array['key']?->foo);

Это даст Warning: Undefined array key "key"

Давайте углубимся в изучение

class Customer {
    public function getAddress(): ?Address {}
}
class Address {
    public function getCountry(): string {}
}

$country = $customer->getAddress()->getCountry();

В приведенном выше фрагменте возвращаемое значение метода Customer::getAddress() может принимать значение null; Он может возвращать значение null или объект класса Address.

Цепочка $customer->getAddress()->getCountry() не является «нулевой безопасной», потому что возвращаемое значение getAddress может быть null, а PHP выдает ошибку при попытке вызвать метод getCountry():

Fatal error: Uncaught Error: Call to a member function getCountry() on null in ...:...

Для безопасного доступа к адресу необходимо было проверить возвращаемые значения null перед дальнейшим доступом к возвращаемому значению.

$address = $customer->getAddress();
$country = $address ? $address->getCountry() : null;

//OR this way

$address = $customer->getAddress();
if ($address) {
    $country = $address->getCountry();
}
else {
    $country = null;
}

Оператор null-safe решает эту проблему путем замыкания доступа к свойству/методу и немедленного возврата null, если левая часть оператора равна null, без выполнения остальной части выражения.

$country = $customer->getAddress()?->getCountry();

Приведенный выше код безопасен для неопределенной проблемы!

Вы можете изучить этого оператора подробнее

Если вы ищете информативный и увлекательный контент по бэкэнд-разработке,
обязательно подпишитесь на меня сегодня. Вы не захотите пропустить последние статьи,
учебные пособия и идеи в этой захватывающей и динамичной области.