Type casting and Comparison with Loose Operator "=="

Viewed 2969

I have a problem baffling me terribly. I noticed this before but didn't give it any heed until today. I was trying to write my own check for integer strings. I know of is_numeric() but it does not suffice since it counts float as numeric not only integers and is_int() which does not work on string numbers.

I did something similar to this


$var1 = 'string';
$var2 = '123'; 

var_dump( (int)$var1 == $var1);// boolean true 
var_dump((int)$var2 == $var2);// boolean true

 var_dump((int)$var1);//int 0
 var_dump($var1);//string 'string' (length=6)

As expected the second var dump outputs true since I expect with php's loose comparison that the string and integer versions be equal.

However with the first, I don't get why this is so. I have tried casting to bool and it still gives me the same result.

I have tried assigning the cast var to a new variablr and comparing the two, still the same result

Is this something I am doing wrong or it is a php bug?

***Note I am not comparing types here. I'm actually trying to take advantage of the fact that int 0 is not equal to string 'string'.

I wrote my integer check differently so I don't really need alternatives for that.

***Edit I did some extra checking and it turns out that 0 == 'string' is true as well. How is that possible?

***Edit 2 There are multiple correct answers below to the question. Thanks to everyone who answered.

7 Answers
Related