有人能解释一下这个代码为什么会这样吗:
var_dump((bool) 1==2);
返回
bool(true)
但是。var_dump(1==2);
返回值
bool(false)
当然第二个返回值是正确的,但为什么在第一种情况下php会返回一个意外的值呢?
===
的另一个原因。 - xDaizu因为在第一个示例中,强制转换发生在比较之前。所以这就好像你写了:
((bool) 1)==2
等价于
true == 2
将 2
转换为 true
并进行比较,最终产生了 true
的求值结果。
为了看到预期的结果,您需要添加括号以明确顺序:
var_dump((bool)(1==2));
!!0 (false)
!!1 (true)
filter_var - 通过具体的过滤器对变量进行过滤
$boolvar = filter_var('true', FILTER_VALIDATE_BOOLEAN);
boolval - 获取变量的布尔值 PHP 5 >=
$boolvar = boolval ('true');
实际上可以使用三目运算符进行操作,但我不建议这样做。
$boolvar = ($string === 'true') ? true: false;
首先,它将执行
(bool)1
而且 (bool) 1 将返回 true。
现在,由于 (bool) 1 在第二步是 true,因此您的语句将变成
true ==2
由于如果我们将2强制转换为布尔值,它将返回true,在最终状态下,您的语句将如下所示
true == true
这显然会返回 true。