PHP8.0新特性之Nullsafe(空安全运算符)

作者: 温新

分类: 【PHP基础】

阅读: 3085

时间: 2021-12-03 15:35:45

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);
});

我是温新

每天进步一点,就一点点

请登录后再评论