PHP技术疑问:为何出现此结果?为何返回1而非true?
关于PHP两个常见疑问的解答
一、为啥PHP里会出现“意料之外”的结果?
我先拿大家最常踩坑的场景举例,比如你写了这样的代码:
var_dump(0 == 'hello'); // 输出 bool(true) echo 0 == 'hello'; // 输出 1
是不是一脸懵?这其实是PHP的弱类型比较机制在搞鬼。作为动态类型语言,PHP在使用==(松散比较)时,会自动转换两边的类型再做比较:
- 当数字和字符串比较时,PHP会把字符串强制转换成数字计算。像
'hello'这种纯字母的字符串,转成数字就是0,所以0 == 0自然返回true。 - 如果换成
===(严格比较),就会同时检查值和类型,0 === 'hello'就会返回false了。
除此之外,null == false、'' == 0这类看似矛盾的结果,也都是弱类型转换导致的。记住严格比较和松散比较的区别,大部分这类“意外”就能避开啦。
二、为啥代码返回1而非true?
这个是PHP对布尔值的类型转换规则导致的:
- 在PHP中,布尔值
true在被当作字符串类型使用时(比如直接echo输出、赋值给字符串变量),会自动被转换成字符串"1";而false会被转换成空字符串""。 - 如果你想看到真正的布尔类型标识,得用
var_dump()——它会明确输出bool(true),而print_r(true)还是会显示1。
举个直观的例子:
$isSuccess = true; echo $isSuccess; // 输出 1 var_dump($isSuccess); // 输出 bool(true)
本质上这是PHP为了兼容不同场景的类型适配逻辑,布尔值在非严格类型的环境下,就会被转成对应的数值/字符串形式。
内容的提问来源于stack exchange,提问作者oxk4r
相关产品推荐
相关产品推荐

