Hi Internals,
I recently learned that using null safe on an array access can still
emit a warning when the array access is not defined. I kinda expected
it to work like a null coalesce and just short circuit there,without
the warning.
Is there any chance this behaviour could be changed in a n upcoming
PHP version? I didn't see anything mentioned specifically about this
in the RFC.
Greetings,
Gert de Pagter/ BackEndTea
Hey Gert,
Hi Internals,
I recently learned that using null safe on an array access can still
emit a warning when the array access is not defined. I kinda expected
it to work like a null coalesce and just short circuit there,without
the warning.Is there any chance this behaviour could be changed in a n upcoming
PHP version? I didn't see anything mentioned specifically about this
in the RFC.Greetings,
Gert de Pagter/ BackEndTea
This seems expected behavior to me: it's "nullsafe", not "undefinedsafe".
If it operated like ??
, then $undefined?->bar()
would be valid too,
which seems wrong, IMO.
Marco Pivetta
$undefined?->bar()
does feel wrong, but $arr[0]?->bar()
does not to me.
But maybe i've just been using javascript too much lately
Hey Gert,
Hi Internals,
I recently learned that using null safe on an array access can still
emit a warning when the array access is not defined. I kinda expected
it to work like a null coalesce and just short circuit there,without
the warning.Is there any chance this behaviour could be changed in a n upcoming
PHP version? I didn't see anything mentioned specifically about this
in the RFC.Greetings,
Gert de Pagter/ BackEndTeaThis seems expected behavior to me: it's "nullsafe", not "undefinedsafe".
If it operated like
??
, then$undefined?->bar()
would be valid too, which seems wrong, IMO.Marco Pivetta
I completely agree with Marco. We should not mix up nullsafe operator with
array access. As for me, aforementioned code works as expected.
As an improvement, we can think of access-safe operator (like $arr[?0]
),
however I'm not sure if introduction of such will make sense.
Regards
Yevhen
Hey Gert,
Hi Internals,
I recently learned that using null safe on an array access can still
emit a warning when the array access is not defined. I kinda expected
it to work like a null coalesce and just short circuit there,without
the warning.Is there any chance this behaviour could be changed in a n upcoming
PHP version? I didn't see anything mentioned specifically about this
in the RFC.Greetings,
Gert de Pagter/ BackEndTeaThis seems expected behavior to me: it's "nullsafe", not "undefinedsafe".
If it operated like
??
, then$undefined?->bar()
would be valid too,
which seems wrong, IMO.Marco Pivetta
I recently learned that using null safe on an array access can still
emit a warning when the array access is not defined. I kinda expected
it to work like a null coalesce and just short circuit there,without
the warning.Is there any chance this behaviour could be changed in a n upcoming
PHP version? I didn't see anything mentioned specifically about this
in the RFC.
That behaves as documented[1]:
| The nullsafe operator works the same as property or method access as
| above, except that if the object being dereferenced is null then null
| will be returned rather than an exception thrown.
And particularly:
| The effect is similar to wrapping each access in an is_null()
check
| first, but more compact.
However, see e.g.
https://github.com/php/php-src/issues/7825#issuecomment-1100052164.
[1]
https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.nullsafe
--
Christoph M. Becker