this post was submitted on 14 Jul 2023
349 points (91.4% liked)

Programmer Humor

31793 readers
249 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 29 points 1 year ago (1 children)

Ah, I understand now. The expression is evaluated like this:

  • $a == 1 ? "one" : $a == 2 ? "two" : $a == 3 ? "three" : "other"
  • $a == 2 ? "two" : $a == 3 ? "three" : "other"
  • "two" ? "three" : "other"
  • "three"
[–] [email protected] 12 points 1 year ago (1 children)

Halp. I don’t understand how it went from step 2 to step 3.

[–] [email protected] 32 points 1 year ago (3 children)

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.

[–] [email protected] 5 points 1 year ago

Thanks! I never worked with PHP but I understand your explanation. Making memes about languages is also about learning

[–] zarp86 5 points 1 year ago

Thank you for the great explanation, and for teaching me the word "truthy."

[–] [email protected] 3 points 1 year ago