Re: Ternary associativity
| From: | Sara Golemon | Date: | Thu, 23 Jul 2020 15:26:21 +0000 |
| Subject: | Re: Ternary associativity | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-111153@lists.php.net to get a copy of this message | ||
On Thu, Jul 23, 2020 at 7:26 AM Nikita Popov <nikita.ppv@gmail.com> wrote:
> PHP currently has an incorrect right-associative ternary operator. In
> https://wiki.php.net/rfc/ternary_associativity the use of
> nested ternaries
> was deprecated, and was supposed to become an error in PHP 8.0.
>
> Concurrently with that proposal
> https://wiki.php.net/rfc/concatenation_precedence made a very
> similar
> change to the concatenation operator precedence. The difference here is
> that this throws a deprecation notice in PHP 7.4 (same), but changes the
> behavior in PHP 8.0 (rather than making it an error).
>
> This is a pretty nonsensical outcome, in that the same type of change is
> implemented in two different ways. I think it would be good to handle the
> ternary change the same way as the concatenation change, i.e. make
> ternaries use the correct left-associative behavior in PHP 8.0, rather than
> throwing an error.
>
> Disagree. Consistency is valuable, but the overlap of misusage is
different.
A stacked right-associative ternary will still give a "good" result in the
sense that it's reliably reproducible and meaningful in its output based on
being written for right-associativity.
A concat mixed with other binary ops (e.g. math ops) will NOT typically
give a "good" result since the string being contacted to the numeric then
having its math op applied will result in a nonsense answer at best.
It made sense for the concat change to favor "fixing" old code in ways that
doesn't apply to stacked-ternaries since a similar "fix" there will more
likely be a break.
Strong -1 from me.
-Sara