I’ve been reading the PHP Docs on Type Juggling and Booleans but I still don’t understand why this comparison evaluates as true. My [incorrect] understanding tells me that in the below if statement, the integer 0 is considered FALSE and “a”, being a non-empty string is considered TRUE. Therefore, I expected this comparison to resolve to FALSE == TRUE and ultimately, FALSE. Which part did I get wrong?
<?php
if(0 == "a"){
$result = "TRUE";
}else{
$result = "FALSE";
}
//$result == "TRUE"
?>
When PHP does a string <=> integer comparison, it attempts to convert the string to a number in an intelligent way. The assumption is that if you have a string “42” then you want to compare the value 42 to the other integer. When the string doesn’t start with numbers, then its value is zero.
From the docs:
This behavior is also inferred in the comparison docs (look at the first line in the first example).