PHP8中引入的空合并运算符(?)和空安全运算符(?->;)之间的差异

PHP8中引入的空合并运算符(?)和空安全运算符(?->;)之间的差异,php,php-8,Php,Php 8,我可以在PHP中使用??运算符来处理未定义的数组索引。 如果空安全运算符提供相同的功能或扩展了??运算符的功能,我会感到困惑 编辑: 我可以在现有PHP版本中检查数组中是否定义了特定属性: $user_actions = ['work' => 'SEO','play' => 'Chess', 'drink' => 'coffee']; $fourth_tag = $user_tags['eat'] ?? "n/a"; 我试图了解空安全运算符是否为我提供了更

我可以在PHP中使用
??
运算符来处理未定义的数组索引。
如果空安全运算符提供相同的功能或扩展了
??
运算符的功能,我会感到困惑

编辑:

我可以在现有PHP版本中检查数组中是否定义了特定属性:

$user_actions = ['work' => 'SEO','play' => 'Chess', 'drink' => 'coffee'];
$fourth_tag = $user_tags['eat'] ?? "n/a";
我试图了解空安全运算符是否为我提供了更好的解决方案?

空合并运算符(
)作为if语句工作。它接受两个值。如果第一个值为空,则由第二个值替换

$a=null;
$b=$a??'B';
此处
$b
将获得
b
值,因为
$a
null

在PHP8中,引入了
NullSafe
操作符(
?->
),它提供了将调用从一个函数链接到另一个函数的选项。根据此处的文件:()

您现在可以使用带有新nullsafe运算符的调用链,而不是空检查条件。当对链中的一个元素求值失败时,整个链的执行将中止,并且整个链的求值为null

以下是文档中的示例:


$country=null;
如果($session!==null){
$user=$session->user;
如果($user!==null){
$address=$user->getAddress();
如果($address!==null){
$country=$address->country;
}
}
}
但在PHP8中,您可以简单地执行以下操作:


$country=$session?->user?->getAddress()?->country;

所以这两个操作符的工作方式有很大的不同。

你的意思是我可以进行嵌套,即??运算符只允许我在右侧指定一个可选值。@MuhammadUmerSheikh
允许您选择一个值,以非空值为准,但
是链接运算符,如果链中的任何变量/函数调用返回空值,则停止执行语句。感谢快速帮助