开发者

if(0 == '%') echo "WTF, Php, why can't you compare things sanely?"

I just reduced a crazy bug to what's in the title of this question. I'm sure there's a Perfectly Reasonable Explanation for why Php thinks that 0 == '%' (or any other special character, I think). I thought it would b开发者_开发知识库e good to get that explanation on StackOverflow!


It will do the same to any string, converting a non-number string to integer always gives 0.


Using '===' (for exact, literal comparison -- the values must be the same type and also equal) instead of '==' solves this problem. With '==' it's trying to cast '%' to a number and 0 is the best it can do.


In the event that a strict comparison operator is not directly suitable, if you want both values to be compared as strings, you can use strcmp(). An example could be where both values are variables, and the types might be either string, or int. Instead of type casting to string and then using strict equality check, strcmp() can be less verbose.

php's type coercion is very convenient. But if you don't understand its many rules(some can bite), you should try to avoid using it. See http://www.php.net/manual/en/types.comparisons.php


since '%' isn't true, it ought to be false (0), so of course 0=='%'

;-) funny though


This is because it converts '%' to number and it is 0.

The way, however, how PHP converts strings to numbers is pure evil IMHO, because non number string does not have to result in zero.

If it starts with a digit then php will result the first number it can find in it and ignore the rest of the string. So:

"2 times 5 equals 10"

..will result in 2 when casted to a number.

Article in the documentation

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜