谁能解释一下这是为什么?
var_dump((bool) 1==2);
返回bool(true)
,
var_dump(1==2);
返回bool(false)
第二次返回当然是正确的,但是为什么第一次php返回一个意外的值?
其实并没有看起来那么奇怪。(bool)
的优先级高于==
,因此:
var_dump((bool) 1==2);
等价于:
var_dump( ((bool) 1) == 2);
或:
var_dump(true == 2);
由于类型杂耍,2
本质上也被转换为bool
(因为这是一个"松散比较"),所以它相当于这个:
var_dump(true == true);
或:
var_dump(true);
因为在第一个例子中,强制转换发生在比较之前。就好像你写了
((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 -获取变量的布尔值
$boolvar = boolval ('true');
用三元运算符但我不推荐使用
$boolvar = ($string === 'true') ? true: false;
您编写的语句((bool) 1==2)将始终返回true,因为它将始终执行如下代码:
首先,它将执行(bool)1
and (bool) 1将返回true。
现在,因为(bool)1在第二步为真,你的语句将像
true ==2
因为如果我们将2类型转换为布尔值,它将返回true,在最终状态你的语句将像
true == true
显然会返回true