PHP>!运算符不合法但有效
PHP >! operator isn't legit but works
所以我在 PHP 5.6 中使用了 >!
比较运算符并且它有效。它没有出现在任何运营商文档中,我很困惑为什么它有效以及为什么 PHPStorm 不抱怨它?即使 !($foo > $bar)
是正确的语法..
作为变量比较运算符,它似乎对我不起作用。在php 5.6中,结果不一致:
$a = 10;
$b = 5;
var_dump($a >! $b);
returns true
但是
$a = 10;
$b = 11;
var_dump($a >! $b);
returns true
再一次
正如其他人所说,您的变量被评估为 false
,这使得上面代码中的 if 语句 returns 为真
您的 >!
运算符实际上是 两个 运算符:>
和 !
。 !
应用于第二个参数:
var_dump(!4); // `false`
var_dump(3 >! 4); // `true`
最后一个案例怎么来的 true
:
var_dump(3 >! 4)
与 var_dump(3 >(! 4))
相同,因为 operators precedence
- 首先,将
!
应用于 4
得到 false
- 其次,比较
3
和 false
得到 true
,因为 3
是 truthy
值,它总是 更大 比任何 falsy
/false
值。
作为练习,您可以理解这个棘手的案例:
var_dump(0 > !0); // false
var_dump(-3 > !0); // false
所以我在 PHP 5.6 中使用了 >!
比较运算符并且它有效。它没有出现在任何运营商文档中,我很困惑为什么它有效以及为什么 PHPStorm 不抱怨它?即使 !($foo > $bar)
是正确的语法..
作为变量比较运算符,它似乎对我不起作用。在php 5.6中,结果不一致:
$a = 10;
$b = 5;
var_dump($a >! $b);
returns true
但是
$a = 10;
$b = 11;
var_dump($a >! $b);
returns true
再一次
正如其他人所说,您的变量被评估为 false
,这使得上面代码中的 if 语句 returns 为真
您的 >!
运算符实际上是 两个 运算符:>
和 !
。 !
应用于第二个参数:
var_dump(!4); // `false`
var_dump(3 >! 4); // `true`
最后一个案例怎么来的 true
:
var_dump(3 >! 4)
与 var_dump(3 >(! 4))
相同,因为 operators precedence
- 首先,将
!
应用于4
得到false
- 其次,比较
3
和false
得到true
,因为3
是truthy
值,它总是 更大 比任何falsy
/false
值。
作为练习,您可以理解这个棘手的案例:
var_dump(0 > !0); // false
var_dump(-3 > !0); // false