On Thu, Jul 23, 2020 at 7:26 AM Nikita Popov <nikita....@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