类型转换为布尔值

Par*_*kos 45 php casting boolean

有人能解释我为什么这样:

var_dump((bool) 1==2);
Run Code Online (Sandbox Code Playgroud)

回报

bool(true)
Run Code Online (Sandbox Code Playgroud)

var_dump(1==2);
Run Code Online (Sandbox Code Playgroud)

回报

bool(false)
Run Code Online (Sandbox Code Playgroud)

当然第二次返回是正确的,但为什么在第一次php返回一个意外的值?

rua*_*akh 88

它看起来并没有那么奇怪.(bool)优先级高于==,所以这个:

var_dump((bool) 1==2);
Run Code Online (Sandbox Code Playgroud)

相当于:

var_dump(  ((bool) 1)   == 2);
Run Code Online (Sandbox Code Playgroud)

或这个:

var_dump(true == 2);
Run Code Online (Sandbox Code Playgroud)

由于类型杂耍,2也基本上被转换为bool(因为这是一个"宽松的比较"),所以它等同于:

var_dump(true == true);
Run Code Online (Sandbox Code Playgroud)

或这个:

var_dump(true);
Run Code Online (Sandbox Code Playgroud)

  • ...尝试始终使用`===`的另一个原因 (2认同)

Jon*_*Jon 20

因为在第一个例子中,演员阵容发生在比较之前.所以就像你写的一样

((bool) 1)==2
Run Code Online (Sandbox Code Playgroud)

这相当于

true == 2
Run Code Online (Sandbox Code Playgroud)

通过转换和比较,最终生产2来评估.truetrue

要查看预期结果,您需要添加parens以使订单显式:

var_dump((bool)(1==2));
Run Code Online (Sandbox Code Playgroud)

看到它在行动.


小智 7

我用这种方式:

!!0 (false)
!!1 (true)
Run Code Online (Sandbox Code Playgroud)

  • 由于标题要求进行类型转换,因此这个答案是正确的,几乎可以用于任何语言.这种结构非常适合JavaScript这样的语言,你需要一个真正的"真"或"假",但不能保留原始值.BTW,使用(bool)进行类型转换的速度要快一些. (4认同)