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
  • 其次,比较 3false 得到 true,因为 3truthy 值,它总是 更大 比任何 falsy/false 值。

作为练习,您可以理解这个棘手的案例:

var_dump(0 > !0);   // false
var_dump(-3 > !0);  // false