PHP 中是否有可选的链接?

php
2022-08-30 19:28:43

我想省略在链式语句中对 null 的检查,例如

if($a && $a->$b && $a->$b->$c){
  $d = $a->$b->$c;
}

并改用可选的链式链接。

这在PHP中是可能的还是实现的?


答案 1

根据这篇文章“空合并运算符(在PHP 7中引入)是这样的表示?用于检查值是否设置或为空,或者换句话说,如果值存在而不是null,则返回第一个操作数,否则,它返回第二个操作数。

所以你可以很容易地做

$d = $a->$b->$c ?? 'DEFAULT' ; 

编辑:这仅适用于属性,而不适用于方法(如下面的评论中的“hackel”所指出的那样)


答案 2

直到8.0菲律宾比索。

这已经在Nullsafe运算符RFC中进行了投票和通过。

语法将为 。?->

所以声明:

if ($a && $a->$b && $a->$b->$c) {
  $d = $a->$b->$c;
}

可以重写为:

$d = $a?->$b?->$c;  // If you are happy to assign null to $d upon failure

艺术

if ($a?->$b?->$c) {
  $d = $a->$b->$c; // If you want to keep it exactly per the previous statement
}

Nullsafe 运算符同时适用于属性和方法。


推荐