3 回答
TA贡献1804条经验 获得超7个赞
直到 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 运算符适用于属性和方法。
TA贡献1877条经验 获得超6个赞
在低于 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);
输出:
NULL
int(2)
3v4l.org 上的演示
更好的解决方案是使用空合并运算符,如@FouedMOUSSI 答案中所述。
从 PHP8(2020 年 11 月 26 日发布)开始,通过nullsafe 运算符支持可选链接(请参阅 @Paul 回答或发布的副本)。
- 3 回答
- 0 关注
- 325 浏览
添加回答
举报