PHP,IF带有NOT(!)运算符的条件和另一组括号

Sec*_*oud 1 php conditional-statements

这两个陈述有什么区别?

if (!$var === true) {
Run Code Online (Sandbox Code Playgroud)

要么

if (!($var === true)) {
Run Code Online (Sandbox Code Playgroud)

我遇到了类似的代码,并试图找出它的用途.

我得到括号内的条件从最里面向外评估.

Roc*_*mat 9

这与PHP的运算符优先级有关.

!评估===IS.所以,在第一个例子中:

  1. 否定 $var
  2. 比较该值 true

在第二个示例中,您使用括号来强制===首先发生.所以,你得到:

  1. 比较$var真实
  2. 否定比较

由于您使用===- 比较类型和值 - 要与布尔值进行比较,因此这些并不完全等效.

怎么$var = 5办?

  1. !$var === true成为!5 === true.就是0 === true这样false.
  2. !($var === true)成为!(5 === true).就是!(false)这样true.

注意:在做!5第一个例子中,5转换成布尔,然后否定(这是如何!工作的).5自您使用以来,第二个示例中没有布尔转换===.

注2:第二个例子相当于$var !== true.