新知一下
海量新知
6 6 1 0 5 6 8

[精选] PHP8新特性,Nullsafe(空安全运算符)如何用 ?

php自学中心 | 用编程思想感受你的生活 2022/09/27 13:50

今天给大家讲解的一个新特性,很实用也有方便。

PHP8中引入了nullsafe运算符,允许在一个对象链式调用对象方法或属性。在链式调用过程中,某个对象方法或属性可能是空的,如果是空的,就会报null错误。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 = AppModelsUser::find(111) ?? '没有数据';

  dd($user);

});



更多“PHP8”相关内容

更多“PHP8”相关内容

新知精选

更多新知精选