PHP中false与0相等但与"00"不等的原因咨询
PHP松散比较中"000000000000" == false返回false的原因
PHP的松散比较(==)会自动转换操作数的类型后再比较,核心规则和你的测试代码拆解如下:
核心类型转换规则
- 当布尔值与其他类型比较时,另一个操作数会被转换为布尔值:
- 布尔值转换规则:空字符串
""、字符串"0"会转为false;所有非空且非"0"的字符串,都会转为true。
- 布尔值转换规则:空字符串
- 当字符串与数值比较时,字符串会被转换为数值:
- 字符串开头的数字部分会被解析为数值,纯数字组成的字符串(比如
"0"、"000000")会转为对应的数值0。
- 字符串开头的数字部分会被解析为数值,纯数字组成的字符串(比如
逐个解析测试代码
echo (0 == false); //->true
布尔值false转为数值0,0 == 0结果为true。echo ("0" == false); //->true
字符串"0"转为布尔值false,false == false结果为true。echo ("0" == 0); //->true
字符串"0"转为数值0,0 == 0结果为true。echo ("000000000000" == 0); //->true
字符串"000000000000"转为数值0,0 == 0结果为true。echo ("000000000000" == false); //->false
字符串"000000000000"既不是空字符串,也不是单个"0",转为布尔值true,true == false结果为false。
内容的提问来源于stack exchange,提问作者Nicolas Henry
相关产品推荐
相关产品推荐

