Kapil Sharma Kapil Sharma - 4 months ago 23
PHP Question

Ternary operator left associativity

In the PHP manual, I find the following 'user contributed note' under "Operators".


Note that in php the ternary operator ?: has a left associativity unlike in C and C++ where it has right associativity.

You cannot write code like this (as you may have accustomed to in C/C++):

<?php
$a = 2;
echo (
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 4 ? 'four' : 'other');
echo "\n";
// prints 'four'



I actually try it and it really prints
four
. However I could not understand the reason behind it and still feel it should print
two
or
other
.

Can someone please explain what is happening here and why it is printing 'four'?

Answer

Because your whole expression evaluates as if it was (......) ? 'four' : 'other'. Since the first element is probably something truthy, it gives you 'four'. In saner languages, where ?: has right associativity, the whole expression evaluates as if it was $a == 1 ? 'one' : (......), where if $a is not 1, you go on to test other things.

Comments