为什么 0 == 'Y' 可以执行成功

0 == 'Y'

if(0 == 'Y'){
    echo 111;
}

输出 111

阅读 4.3k
7 个回答

php里面==的比较松散,数字类型与字符串类型比较,字符串会转成数字类型"123abc"会转成123,而'abc123'则会转成空,空即是0具体看下这个吧

If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

数字和字符串比较,字符串会被转换为数字,Y不含任何的的有效数字字符,因此被转换成 0

var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

因为当数字与字符串比较的时候,字符串会被转换为数字。所以在0和Y比较的时候,首先会把Y进行转换成数字,也就是intval('Y') -> 0 也就是转换为0了。然后 0 == 0 是成立的。固然是输出111。

变量类型的隐式转化 双方类型不同 会转化成同一种类型

因为'Y'在和数值比较时被自动转换为了0啊

推荐问题
宣传栏