为什么我得到 Undefined 属性: stdClass:: with php 8 nullsafe operator

Why am I getting Undefined property: stdClass:: with php 8 nullsafe operator

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

$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 运算符的作用有点误解。

如果 $referencenull,那么 $reference?->first_name 将 return null 没有警告,但由于 $reference 实际上是一个对象, ?-> 就像一个普通的对象运算符,因此出现未定义的 属性 警告。