It’s cause PHP associates the if-then-else pair only with its immediate “else” option, not with the entirety of the line.
Let’s go by parts.
$a == 1 ? "one" : $a == 2 ? "two" : $a == 3 ? "three" : "other"
Is $a equal to 1? If so, we’re “set” to the value on the left, which is "one"
, if not then we’re set to the value on the right, which is . $a is not equal to 1, so we’re set to the right value,
.
This replaces the relevant part, $a == 1 ? "one" : $a == 2
, with . So we’re left with:
$a == 2 ? "two" : $a == 3 ? "three" : "other"
Next, is $a equal to 2? If so, we’re set to "two"
, if not we’re set to . The comparison is true, so we’re set to the value on the left,
"two"
. The relevant part here is $a == 2 ? "two" : $a == 3
only, so it replaces it with "two"
cause again, PHP is only associating with its immediate pair. So now we’re left with:
"two" ? "three" : "other"
Finally, is "two"
truthy? If so, we’re set to "three"
, if not we’re set to "other"
. Since "two"
is truthy we’re then left with "three"
.
It’s super confusing for sure.