猿问

PHP 中是否有可选链?

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


if($a && $a->$b && $a->$b->$c){

  $d = $a->$b->$c;

}

并改用可选链接。


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


侃侃尔雅
浏览 326回答 3
3回答

慕桂英546537

根据这篇文章 “空合并运算符(在 PHP 7 中引入)表示为这样??用于检查值是否已设置或为空,或者换句话说,如果值存在且不为空,则它返回第一个操作数,否则返回第二个操作数。”所以你可以很容易地做到$d = $a->$b->$c ?? 'DEFAULT' ;编辑:这仅适用于属性,而不适用于方法(正如下面评论中的“hackel”所指出的那样)

三国纷争

直到 PHP 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 运算符适用于属性和方法。

慕哥9229398

在低于 8 的 PHP 版本中,不支持可选链接。您可以通过使用错误控制运算符( )来模拟它的属性,该运算符@将抑制通常会从分配中发生的任何错误。例如:$b = 'b';$c = 'c';$e = 'e';$a = (object)['b' => (object)['e' => 2]];@$d = $a->$b->$c;var_dump($d);@$d = $a->$b->$e;var_dump($d);输出:NULLint(2)3v4l.org 上的演示更好的解决方案是使用空合并运算符,如@FouedMOUSSI 答案中所述。从 PHP8(2020 年 11 月 26 日发布)开始,通过nullsafe 运算符支持可选链接(请参阅 @Paul 回答或发布的副本)。
随时随地看视频慕课网APP
我要回答