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'?
In any sane language, the ternary operator is right-associative, such that you would expect your code to be interpreted like this:
However, the PHP ternary operator is weirdly left-associative, such that your code is actually equivalent to this:
In case it still isn't clear, the evaluation goes like this: