Re: [Proposal] Modification to ?: functionality

From: Date: Tue, 26 Nov 2013 17:41:09 +0000
Subject: Re: [Proposal] Modification to ?: functionality
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-70414@lists.php.net to get a copy of this message
On Tue, Nov 26, 2013 at 4:58 PM, Chris London <me@chrislondon.co> wrote: > On Tue, Nov 26, 2013 at 8:15 AM, Mats Lindh <mats.lindh@gmail.com> wrote: > > > On Tue, Nov 26, 2013 at 3:43 PM, Chris London <me@chrislondon.co> wrote: > > > >> I believe these two statements are functionally equivalent: > >> > >> $foo = $foo ? $foo : 'default'; > >> > >> $foo = $foo ?: 'default'; > >> > > > > They are. > > > > > > I would like to change it so it also checks for isset() so I propose the > >> following would be functionally equivalent: > >> > >> $foo = isset($foo) && $foo ? $foo : 'default'; > >> > >> $foo = $foo ?: 'default'; > >> > We can't change the behaviour of ?: that ship has already sailed, we'll just be hurting existing codebases on upgrading and more user education is required to understand non-visual changes in syntax like this, lets try to learn from our mistakes by not changing 'behaviour' anymore. An alternative syntax that is similar and not ugly would be good since the ?: behaviour was broken from the start since you still need to run isset() before running ?: which was the problem we tried to solve in the first place but it just didn't happen. I don't like the @ symbol it's too different from what's already there on the ternary logic. Proposal: $foo = $arr['value'] ?:: ""; Thoughts? > > > The would break the assumption that a reference to an uninitialized value > > would generate a notice, unless explicitly handled in the logic. > > > > While I also would like to have something similar to ?: to handle default > > values for array keys, etc., this would change a fundamental assumption > > that as been in place for many years now. I'm not sure if that's a BC > break > > that would be acceptable this late. An alternative operator may be more > > suitable. > > > > What do you think about using: > > $foo = $foo @: 'default'; > > and possibly > > $foo @= 'default'; > > > > > > > The change proposed has also been discussed several times since the > > implementation of ?:. See the ifsetor-RFC: > > > > https://wiki.php.net/rfc/ifsetor > > > > It also contains links to the discussion around the feature back then. > > > > --mats > > >

« previous php.internals (#70414) next »