的优先顺序和含义! PHP中的运算符

时间:2019-01-16 17:14:45

标签: php operator-keyword

在PHP doc中,据说是运算符!具有比任何其他逻辑或任何比较运算符更高的优先级。

我创建了3个条件:

$x = 4; $y = -12; 

if(!$x >= 0 AND !$y >= 0)){echo '1/ Validated';}
if(!($x >= 0) AND !($y >= 0)){echo '2/Validated';}
if(!($x >= 0 AND $y >= 0)){echo '3/Validated';}

如果回显有效,则第一个有效,第二个不有效,第三个有效。

我只是不明白为什么第一个if回声得到了验证。据我了解,这里比较$ x> = 0和$ y> = 0(首先是true和false),然后反转结果,使它成为false和true,我们最终得到if(false AND true)并且if中的代码不应执行。

我想我误解了“!”的能力。运算符或优先级,但我不知道在哪里。

有人可以澄清一下吗?

1 个答案:

答案 0 :(得分:3)

!的优先级高于>=,因此:

if(!$x >= 0 AND !$y >= 0)

这样评估:

if(((!$x) >= 0) AND ((!$y) >= 0))

!$x>=之前被评估。

所以,我们有:

  • $x = 4
  • !$x的计算结果为false(如果布尔值为true,则求4,然后将其求反)
  • (!$x) >= 0的计算结果为true(上一步的false评估为int为0)
  • $y = -12
  • !$y的计算结果为false(如果bool为true,则计算为-12,然​​后将其求反)
  • (!$y) >= 0的计算结果为true(上一步的false评估为int为0)
  • !$x >= 0 AND !$y >= 0的计算结果为true AND true,这是正确的