跳至正文

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

  • PHP

学习就要学习新的技术,新的版本!这是每个程序员一贯的作风。与时俱进,你才不会被很快的淘汰掉。所以,作为phper的你,你必须要学php8了哦!

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

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 = \App\Models\User::find(111) ?? '没有数据';
  dd($user);
});

《PHP8新特性,Nullsafe(空安全运算符)如何用 ?》有1个想法

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注