问题描述
在PHP中具有使用三级运算符的示例代码,我得到了“默认值”。
$myObject = null; // I'm doing this for the example
$result = $myObject ? $myObject->path() : 'default value';
但是,当我尝试使用null合并运算符执行此操作时,出现错误
$result = $myObject->path() ?? 'default value';
我在做什么错了?运算符?
解决方法
这些代码片段的工作方式不同:
$result = $myObject ? $myObject->path() : 'default value';
说:如果'default value'
是$myObject
NULL
$result = $myObject->path() ?? 'default value';
说:如果$myObject->path()
返回NULL
,则使用默认值-但是,只有对象本身不是NULL
SQL Error [22P02]: ERROR: invalid input syntax for type json
Detail: Token "InnerArray" is invalid.
Position: 49
Where: JSON data,line 1: InnerArray
将在左侧为空或未设置的情况下起作用,但是在您的情况下,如果??
为空,则无法评估左侧。
在您的情况下,您应该考虑的是PHP 8提供了新的nullsafe operator(因此需要等待)
$myObject
如果$result = $myObject?->path() ?? 'default value';
为空,这应该使左侧为空
直到您可以这样做:
$myObject
这与您的第一个用例不同,如果$result = ($myObject ? $myObject->path() : null) ?? 'default value';
或 default value
为空,则会得到$myObject