为什么我会得到 Undefined property: stdClass:: with php 8 nullsafe 运算符

nag*_*hal 11 php null null-coalescing-operator nullsafe

PHP 8.0 引入了 nullsafe 运算符,可以像这样使用$foo?->bar?->baz;Undefined property: stdClass::$first_name我有一个在 php 8.1 上运行的代码示例,即使它使用 nullsafe 运算符,也会引发错误:

$reference = (object) $reference; // Cast of array to object

return [
    'FirstName' => $reference?->first_name,
];
Run Code Online (Sandbox Code Playgroud)

为了解决该错误,我必须使用空合并运算符:

$reference = (object) $reference; // Cast of array to object

return [
    'FirstName' => $reference->first_name ?? null,
];
Run Code Online (Sandbox Code Playgroud)

为什么 nullsafe 运算符在这种情况下会抛出错误?

Don*_*nic 12

您似乎对 nullsafe 运算符的作用有轻微的误解。

如果$referencewas null,则将$reference?->first_name返回null且不会发出警告,但由于$referenceis 实际上是一个对象,?->因此其功能就像普通对象运算符一样,因此会出现未定义的属性警告。