Re: Ternary associativity

From: Date: Thu, 23 Jul 2020 17:36:18 +0000
Subject: Re: Ternary associativity
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-111159@lists.php.net to get a copy of this message
Den 2020-07-23 kl. 17:26, skrev Sara Golemon:
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
Would it then make sense to have it as compile time error in 8.0 and make it right-associativein in e.g. 8.1? OTOH, when looking in RFC on top 1000 affected composer packages it looks like having the change in 8.0 might be a way forward... r//Björn L

« previous php.internals (#111159) next »