Re: [RFC] Implicit isset() in Shorthand Ternary Operator
| From: | Andrea Faulds | Date: | Sun, 07 Sep 2014 12:25:53 +0000 |
| Subject: | Re: [RFC] Implicit isset() in Shorthand Ternary Operator | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-77092@lists.php.net to get a copy of this message | ||
On 7 Sep 2014, at 13:22, Sherif Ramadan <theanomaly.is@gmail.com> 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/