PHP8.0新特性之Nullsafe(空安全运算符)
Nullsafe运算符
语法:?->
介绍:
PHP8中引入了nullsafe
运算符,允许在一个对象链式调用对象方法或属性。
在链式调用过程中,某个对象方法或属性可能是空的,如果是空
的,就会报null
错误。nullsafe
就很好的解决了这个问题。
nullsage案例
以更加贴近开发的案例作为演示,这里我使用Laravel框架。
需求:用户登录后,在blade
模板中显示用户名,我们会这么调用:auth()->user()->name
,假设user中没有name,那么这样调用就会报错。现在就用PHP8中的方法来解决这个问题。
// web.php
// 案例一
Route::get('a', function () {
return auth()->user()?->name;
});
// 案例二
Route::get('b', function () {
return auth()?->user()?->name;
});
案例一:当auth()调用user()时,user再使用?->
去调用name
属性,如果name为null
,那么就直接返回null
,因此,它是有返回值,其值为null
。
案例二:当auth()调用user时,使用?->
,就是在说,有user()
这个对象吗,有的话继续使用user()
调用其值,没有的话就直接返回null。
PHP7 null合并运算
??
是PHP7中引入的新特性更,用来替代三元运算
和isset()
函数功能结合一起使用。如果存在且不是 NULL 空合并运算符返回它的第一个操作数;否则返回第二个操作数。
// 以前的写法
$name = isset($_GET['name']) ? $_GET['name'] : '温新';
// php7及以后的写法
// 获取get参数值,不存在则返回 '自如初'
$name = $_GET['name'] ?? '自如初';
下面还是以Laravel为例子,使用??
演示一个功能。
当查询一个不存在的用户时,可以直接返回其他数据,如下:
Route::get('a', function () {
$user = \App\Models\User::find(111) ?? '没有数据';
dd($user);
});
我是温新
每天进步一点,就一点点
请登录后再评论