Функция optional
Функция optional применяется к объекту,
который может быть null, и позволяет
безопасно обращаться к его свойствам и методам.
Если объект не равен null, функция возвращает
сам объект, иначе возвращается экземпляр класса
Illuminate\Support\Optional, у которого все
вызовы методов и обращения к свойствам возвращают
null.
Синтаксис
<?php
optional($object)->property;
optional($object)->method();
optional($object, function($obj) {
return $obj->method();
});
?>
Пример
Давайте получим свойство 'title' у объекта
статьи, который может быть null:
<?php
use AppModelsArticle;
$article = Article::find(1);
$title = optional($article)->title;
echo $title;
?>
Результат выполнения кода:
"article 1"
Пример
Если объект не найден, функция optional
предотвращает ошибку и возвращает null:
<?php
use AppModelsArticle;
$article = Article::find(999);
$title = optional($article)->title;
var_dump($title);
?>
Результат выполнения кода:
null
Пример
Функция optional также позволяет безопасно
вызвать метод объекта. Давайте вызовем метод
getFullName у объекта пользователя:
<?php
use AppModelsUser;
$user = User::find(1);
$fullName = optional($user)->getFullName();
echo $fullName;
?>
Результат выполнения кода:
"John Doe"
Пример
Вторым параметром можно передать замыкание,
которое выполнится только если объект не равен
null:
<?php
use AppModelsUser;
$user = User::find(1);
$res = optional($user, function($obj) {
return $obj->getFullName() . ' (' . $obj->email . ')';
});
echo $res;
?>
Результат выполнения кода:
"John Doe (john@example.com)"
Пример
Если объект равен null, замыкание не выполнится,
и функция вернёт null:
<?php
use AppModelsUser;
$user = User::find(999);
$res = optional($user, function($obj) {
return $obj->getFullName() . ' (' . $obj->email . ')';
});
var_dump($res);
?>
Результат выполнения кода:
null