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)
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)