Php 8.0 introduced the nullsafe operator which can be used like so $foo?->bar?->baz;
.
I have a code sample running on php 8.1 that throws the error Undefined property: stdClass::$first_name
even though it is using the nullsafe operator:
$reference = (object) $reference; // Cast of array to object
return [
'FirstName' => $reference?->first_name,
];
To solve the error, I have to use the null coalescing operator:
$reference = (object) $reference; // Cast of array to object
return [
'FirstName' => $reference->first_name ?? null,
];
Why is the nullsafe operator throwing an error in this case?
You seem to have a slight misunderstanding of what the nullsafe operator does.
If
$reference
wasnull
, then$reference?->first_name
would returnnull
with no warning, but since$reference
is actually an object,?->
just functions like a normal object operator, hence the undefined property warning.