Nullsafe array access can still emit a warning

php.internals

Gert

4 years ago
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. https://3v4l.org/1raa8 Greetings, Gert de Pagter/ BackEndTea

Marco Pivetta

4 years ago
Hey Gert, On Wed, 24 Aug 2022 at 14:59, Gert de Pagter <gertp93@gmail.com> wrote:
> 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. > > https://3v4l.org/1raa8 > > 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 https://twitter.com/Ocramius https://ocramius.github.io/

Gert

4 years ago
`$undefined?->bar()` does feel wrong, but `$arr[0]?->bar()` does not to me. But maybe i've just been using javascript too much lately On Wed, 24 Aug 2022 at 15:11, Marco Pivetta <ocramius@gmail.com> wrote:

[ ]

4 years ago
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 On Wed, Aug 24, 2022, 4:11 PM Marco Pivetta <ocramius@gmail.com> wrote:

Christoph Becker

4 years ago
On 24.08.2022 at 14:58, Gert de Pagter wrote:
> 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. > > https://3v4l.org/1raa8
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