辅助方法 optional 的实现
在访问对象属性时,如果没有判断,经常会出现「未定义属性的错误」
<?php
$user = User::find(1000000); // 获取一个不存在的用户
$user->name; // Trying to get property 'name' of non-object
使用 Laravel 提供的 optional
函数则不会出现该错误
<?php
optional($user)->name; // null
下面我们来简单实现该功能。
定义类
<?php
namespace App\Support;
class Optional
{
protected $value;
/**
* Optional constructor.
*
* @param $value
*/
public function __construct($value)
{
$this->value = $value;
}
public function __get($key)
{
if(is_object($this->value)){
return $this->value->{$key} ?? null;
}
}
public function __isset($key)
{
if(is_object($this->value)){
return isset($this->value->{$key});
}
return false;
}
}
测试
<?php
use App\Support\Optional;
$user = User::find(1000000);
$optional = new Optional($user);
$optional->name; // null
isset($optional->name); // false
封装成函数
<?php
function custom_optional($value)
{
return new \App\Support\Optional($value);
}
custom_optional($user)->name; // null