Re: [PHP-DEV] [RFC] Implicit isset() in Shorthand Ternary Operator

[email protected] (Andrea Faulds)
Newsgroups php.internals
Message-ID <[email protected]>
On 7 Sep 2014, at 13:22, Sherif Ramadan <[email protected]> wrote:

> I've played around with this branch for a bit and seems reasonable, passes
> the tests, and doesn't seem to have any serious issues/memories leaks
> AFAICT.

There’s actually a quite serious issue just now, which is that it evaluates the first operand twice if it’s not empty. This is because $a ?: $b is expanded to empty($a) ? $b : $a, such that if you did something which mutates state in there, it’d happen twice. This is obviously not good, and I’m going to figure out how to fix this.


> I can't stress enough, however, how important it is for us to avoid
> inconsistencies in behavior between various forms of syntax. This is often
> something users complain of as often they complain about not getting such
> features. So let's make ternary consistent before we implement yet another
> oddity in PHP (half-assed and ill designed).
> 
> I don't actually agree with the premise that ternary should wrap the first
> operand in empty() to begin with, but if this is what people want, fine.
> Let's just do it right.
> 
> And as Rasmus mentioned in the PR, make the documentation very _cleary_ if
> it gets accepted.

Yeah, I’ll be sure to make it crystal clear that they aren’t quite the same.

FWIW, it’s not our only shorthand which differs in behaviour. For example, ++ and += 1 are NOT the same, though I’d love to fix that particular inconsistency.

--
Andrea Faulds
http://ajf.me/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.