Php 8.0 引入了 nullsafe 运算符,可以像这样使用
$foo?->bar?->baz;
。
我有一个在 php 8.1 上运行的代码示例,即使它使用 nullsafe 运算符,也会抛出错误 Undefined property: stdClass::$first_name
:
$reference = (object) $reference; // Cast of array to object
return [
'FirstName' => $reference?->first_name,
];
要解决该错误,我必须使用空合并运算符:
$reference = (object) $reference; // Cast of array to object
return [
'FirstName' => $reference->first_name ?? null,
];
为什么 nullsafe 运算符在这种情况下会抛出错误?
您似乎对 nullsafe 运算符的作用有轻微的误解。
如果
$reference
是 null
,那么 $reference?->first_name
将返回 null
且没有任何警告,但由于 $reference
实际上是一个对象,所以 ?->
只是像普通对象运算符一样工作,因此会出现未定义属性警告。
如果有许多嵌套属性,可以使用 try-catch:
try {
if ($response->foo->bar->foo->bar->status == 'something') {
...
}
} catch (\ErrorException $ex) {
// Property missing exception will be caught here
}