逻辑布尔否定运算符优先级和关联


Logical Boolean Negation Operator Precedence and Association

这是我在StackOverflow上的第一个问题,因此我想以前在这里被问过,但我在搜索栏中键入的所有内容都给了我不同的问题。(或者有时根本没有结果!(

我在w3Schools上学习,但我看到了这个看似简单的代码片段,它引发了一小部分问题:

从本质上讲,代码上写着:

if(! test === FALSE)
  display("test successful!");
else
  display("test failed...")

在这种特殊情况下,">test"在成功时返回字符串,在失败时返回(布尔(FALSE

以下是我内心深处的问题。

  1. 至于条件/if语句开头的感叹号(又名"逻辑NOT",又名"否定运算符"(,是不是:

    A( 应用于括号内的整个语句?,或

    B( 只与"测试"关联?

注意:在这种情况下,否定运算符的关联性可能不会改变结果,但它的关联性在以下情况下很重要:(!FALSE||TRUE(,是吗

  1. 我理解否定运算符在布尔运算中的工作方式,但当面对(PHP(字符串时,否定运算符的行为如何?

    A( 如果字符串恰好是"true"或"0"之类的棘手字符串,否定运算符的行为会改变吗?

  2. (!test==FALSE([test!==FALSE]相同吗?他们为什么不直接用"!=="?

此处是有问题的实际代码:

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}

进一步的PHP问题:在这种情况下,使用filter_var((是否比使用filter_put((有某种优势?为什么w3Schools使用filter_var((而不使用filter_put((?

  1. 正如您在PHP中的文档中看到的那样,操作符有不同的优先级。意味着:!首先应用于$test

  2. 根据单据,空字符串'''0'将转换为false,否则为true

  3. 这不一样。当$test等于空字符串'''0'时,这两个条件具有不同的行为。