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';
说:如果 $myObject
是 NULL
,则使用 '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
]
使用 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';
说:如果 $myObject
是 NULL
'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
在那之前你可以做:
$result = ($myObject ? $myObject->path() : null) ?? 'default value';
这与您的第一个用例不同,如果 $myObject
或 $myObject->path()
为 null[=19=,您将得到 default value
]