我有以下代码:
<?php
$val = 0;
$res = $val == 'true';
var_dump($res);
?>
我一直认为 $res 应该是“false”,就像上面的表达式一样,PHP 会尝试将 $val 类型转换为布尔类型(其中零将被转换为 false)和字符串(非空字符串为 true)。但是如果我执行上面的代码输出将是:
boolean true
我错过了什么吗?谢谢。
在 PHP 中,所有非空、非数字字符串的计算结果为零,因此0 == 'true'
是真的,但是0 === 'true'
是假的。字符串true
尚未转换为布尔值,但正在比较a string到零。零保留为 int 值,而不是转换为布尔值。所以最终你得到:
// string 'true' casts to int 0
0 == 0 // true
尝试这个:
echo intval('true');
// 0
echo intval('some arbitrary non-numeric string');
// 0
Review PHP 类型比较表 http://php.net/manual/en/types.comparisons.php。一般来说,当在 PHP 中进行布尔比较并且类型不相同时(在本例中是 int 到 string),使用严格比较是有价值的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)