类型转换为布尔型



谁能解释一下这是为什么?

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

最新更新