Класс 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();
Приведенный выше код безопасен для неопределенной проблемы!
Вы можете изучить этого оператора подробнее
Если вы ищете информативный и увлекательный контент по бэкэнд-разработке,
обязательно подпишитесь на меня сегодня. Вы не захотите пропустить последние статьи,
учебные пособия и идеи в этой захватывающей и динамичной области.