我有以下代码:
<?php
$val = 0;
$res = $val == 'true';
var_dump($res);
?>
我一直觉得$res应该是"false",因为在上面的表达式中,PHP 会尝试将 cast $val 键入布尔类型(其中零将转换为 false)和一个字符串(非空字符串为 true)。但是如果我执行上面的代码,输出将是:
boolean true
我错过了什么吗?谢谢。
在 PHP 中,所有非空、非数字字符串的计算结果为零,因此0 == 'true'
为 TRUE,但 0 === 'true'
为 FALSE。 字符串true
尚未转换为布尔值,而是作为字符串与零进行比较。 零保留为 int 值,而不是转换为布尔值。所以最终你会得到:
// string 'true' casts to int 0
0 == 0 // true
试试这个:
echo intval('true');
// 0
echo intval('some arbitrary non-numeric string');
// 0
查看 PHP 类型比较表。 通常,当在PHP中进行布尔比较并且类型不同(在这种情况下为int到字符串)时,使用严格的比较是有价值的。
因为
$val
是第一个运算符,PHP 将字符串true
转换为变为 0 的整数。结果 0 ==0,您的结果为真;
试试这个
<?php
$val = 1;
$res = (bool)$val == 'true';
var_dump($res);
?>