PHP And Nesting Ternary Operators

I came across an interesting quirk in PHP today. The way a nested ternary operator is evaluated in PHP is unlike that of any other language I’ve come across: left to right.

Ex:

<?php
$test = 'one';
echo $test == 'one' ? 'one' :  $test == 'two' ? 'two' : 'three';
?>

What do you suppose that prints? Wrong, the answer is ‘two’. Let’s break this down in how it is working, shall we.

<?php
$test = 'one';
echo $test == 'one' ? 'one' :  $test == 'two' ? 'two' : 'three';
?>

Here, I’ve emphasized the first ternary operation. What PHP will do is evaluate this section and return a value, in this case it is the string ‘one’. The boolean value of the string ‘one’ is true. So, for the second ternary operation, ‘two’ gets selected.

No other language I know of acts like this.

Hopes this help someone one day.

4 thoughts on “PHP And Nesting Ternary Operators

  1. putting parentheses around the inner ternary operator will make it evaluate properly, it is definitely annoying when you first come across it.

  2. Oh man i spent an two hours on tracking down a “bug” from this. I’m glad now i know why PHP is acting like it is

Leave a Reply

Your email address will not be published. Required fields are marked *