PHP 空合并运算符的使用

PHP Null coalescing operator usage

使用 PHP 中的三级运算符的示例代码,我得到了 'default value'。

$myObject = null; // I'm doing this for the example
$result = $myObject ? $myObject->path() : 'default value';

但是,当我尝试使用空合并运算符执行此操作时,出现错误

在 null 上调用成员函数 path()

$result = $myObject->path() ?? 'default value';

我做错了什么??运算符?

这些片段的工作方式不同:

$result = $myObject ? $myObject->path() : 'default value'; 说:如果 $myObjectNULL

,则使用 'default value'

$result = $myObject->path() ?? 'default value'; 说:使用默认值 if $myObject->path() returns NULL - 但如果对象本身不是,则该调用只能 return NULL

如果左侧为空或未设置,

?? 将起作用,但是在您的情况下,如果 $myObject 为空,则无法评估左手。

在您的情况下,您应该考虑的是 PHP 8 可用的新 nullsafe operator(因此需要等待)

$result = $myObject?->path() ?? 'default value';

如果 $myObject 为 null

,这应该使左侧为 null

在那之前你可以做:

$result = ($myObject ? $myObject->path() : null) ?? 'default value'; 

这与您的第一个用例不同,如果 $myObject $myObject->path() 为 null[=19=,您将得到 default value ]