[VOTE] nullsafe operator RFC

php.internals

Ilija Tovilo

6 years ago
Hi internals I started the vote on the nullsafe operator RFC. https://wiki.php.net/rfc/nullsafe_operator The vote closes on 2020-07-31. Ilija

Dan Ackroyd

6 years ago
On Fri, 17 Jul 2020 at 10:05, Ilija Tovilo <tovilo.ilija@gmail.com> wrote:
> > Hi internals > > I started the vote on the nullsafe operator RFC. > https://wiki.php.net/rfc/nullsafe_operator > > The vote closes on 2020-07-31.
I'm voting yes. From the discussions I've seen, there are two overlapping reasons people have said for why they don't like this proposal. "checking that the value is null should be a red flag that something is wrong with the data model." Even if there is something wrong with the data model, programmers are often in a position where they can't change the data model. That can be because it's part of an api/library that's provided by a 3rd party, or is part of a legacy code base that can't be refactored right now. PHP exists to be useful. Adding a small feature that makes it easier to work with some data models is a useful thing to do. But also, sometimes the data just is null. Whether you use a null type, a type union, Option<T>, a Nothing-type or whatever, it's got to be handled somewhere. This RFC provides a way of handling it in a way that is very easy to write and read, imo. I realise that some people would prefer to not use this syntax in their own code, which is fine. But as it makes coding easier for other people, I hope people would only vote no for a stronger reason than they would personally prefer not to use it. cheers Dan Ack

Ilija Tovilo

6 years ago
Hi internals
> I started the vote on the nullsafe operator RFC. > https://wiki.php.net/rfc/nullsafe_operator
I'm happy to announce that the RFC was accepted with 56 votes in favor and 2 votes against. Thanks to everybody who participated! Ilija

Nikita Popov

6 years ago
On Fri, Jul 31, 2020 at 10:59 AM Ilija Tovilo <tovilo.ilija@gmail.com> wrote:
> Hi internals > > > I started the vote on the nullsafe operator RFC. > > https://wiki.php.net/rfc/nullsafe_operator > > I'm happy to announce that the RFC was accepted with 56 votes in favor > and 2 votes against. Thanks to everybody who participated! > > Ilija >
I just noticed that while we support "$a->b", we do not support "$a?->b" (the quotes are relevant -- I'm talking about interpolated strings here). That is, in the latter case the "?->b" is just treated like a string part, not like a property access. I don't think the behavior for this case has been discussed and I'm not sure what the intended behavior here is. Nikita

Ilija Tovilo

6 years ago
Hi Nikita
>> > I started the vote on the nullsafe operator RFC. >> > https://wiki.php.net/rfc/nullsafe_operator > > I just noticed that while we support "$a->b", we do not support "$a?->b" (the quotes are relevant -- I'm talking about interpolated strings here). That is, in the latter case the "?->b" is just treated like a string part, not like a property access. > > I don't think the behavior for this case has been discussed and I'm not sure what the intended behavior here is.
I missed that one. There's a test for var_dump("{$null?->foo}"); but not one without the braces. I would classify this as a bug and expect this to behave the same as -> (but not erroring on null obviously). Worth noting that chaining won't work as it doesn't work for -> either. Sara/Gabriel, What do you think? Should we fix this? I'm assuming this will only require a change in the grammar but I haven't checked yet. Ilija

Ilija Tovilo

6 years ago
Hi again
> > I just noticed that while we support "$a->b", we do not support "$a?->b" (the quotes are relevant -- I'm talking about interpolated strings here). That is, in the latter case the "?->b" is just treated like a string part, not like a property access. > > > > I don't think the behavior for this case has been discussed and I'm not sure what the intended behavior here is. > > I missed that one. There's a test for var_dump("{$null?->foo}"); but > not one without the braces. I would classify this as a bug and expect > this to behave the same as -> (but not erroring on null obviously). > Worth noting that chaining won't work as it doesn't work for -> > either. > > Sara/Gabriel, What do you think? Should we fix this? I'm assuming this > will only require a change in the grammar but I haven't checked yet.
Just as I sent this I realized this is technically a breaking change, probably a small one but still worth mentioning. I'm now also not totally sure if we should change it at this point. Let me know what you think. Ilija

Sara Golemon

6 years ago
On Sat, Aug 8, 2020 at 3:42 PM Ilija Tovilo <tovilo.ilija@gmail.com> wrote:
> > > I just noticed that while we support "$a->b", we do not support > "$a?->b" (the quotes are relevant -- I'm talking about interpolated strings > here). That is, in the latter case the "?->b" is just treated like a string > part, not like a property access. > > > > > > I don't think the behavior for this case has been discussed and I'm > not sure what the intended behavior here is. > > > > I missed that one. There's a test for var_dump("{$null?->foo}"); but > > not one without the braces. I would classify this as a bug and expect > > this to behave the same as -> (but not erroring on null obviously). > > Worth noting that chaining won't work as it doesn't work for -> > > either. > > > > Sara/Gabriel, What do you think? Should we fix this? I'm assuming this > > will only require a change in the grammar but I haven't checked yet. > > Just as I sent this I realized this is technically a breaking change, > probably a small one but still worth mentioning. I'm now also not > totally sure if we should change it at this point. Let me know what > you think. > >
Hah! And just as I sent my previous message, I noticed you started THIS thread before asking me about it elsewhere. Circles.... Anyway, IMO this comes under bugfix. By all means fix it up. :D -Sara

tyson andre

6 years ago
Hi Ilija Tovilo, > > I just noticed that while we support "$a->b", we do not support "$a?->b" > > (the quotes are relevant -- I'm talking about interpolated strings here). > > That is, in the latter case the "?->b" is just treated like a string part, > > not like a property access. > > Just as I sent this I realized this is technically a breaking change, > probably a small one but still worth mentioning. I'm now also not > totally sure if we should change it at this point. Let me know what > you think. To me, that sounds like a reasonable bugfix for 8.0 and something most applications wouldn't be using before php 8.0. I'd missed whether the RFC mentioned it or not. - Tyson