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 == 2
. $a is not equal to 1, so we’re set to the right value, $a == 2
.
This replaces the relevant part, $a == 1 ? "one" : $a == 2
, with $a == 2
. 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 $a == 3
. 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.
It’s not, and in a vacuum I don’t think anyone would mind. It is the fact that it is concealed that is really shitty.
As much as I’d like to keep my system up to date (and I really do), if I’m watching a movie then that is my priority. Any task I’m currently using the bandwidth on, should be considered my system’s priority. This is akin to rebooting the computer when it determines it is necessary, with the user having little control to stop it; it’s intend isn’t malicious, and it is meant to protect the user, but all it achieves is upsetting the user and make us find ways around it or turn it off completely.