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

Logical Boolean Negation Operator Precedence and Association

这是我关于 Whosebug 的第一个问题,因此我想它 以前曾在这里被问过 ,但我在搜索栏中输入的所有内容都会给我不同的问题。 (或者有时根本 "no" 结果!)

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

代码本质上说:

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

"test" 在这种特殊情况下 returns 成功时为字符串,失败时为(布尔值)FALSE

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

  1. 至于 conditional/if 语句开头的感叹号(又名 "Logical NOT" 又名 "Negation Operator"),是:

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

    B) 仅关联到 "test"?

注意:在这种情况下,否定运算符的结合性可能不会改变结果,但它的结合性在以下情况下很重要:(!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_input()在这种情况下?为什么 w3Schools 使用 filter_var() 而不是 filter_input()?

  1. 正如您在 PHP 中的 doc 运算符中看到的那样,它们具有不同的优先级。意思是:!先应用于$test

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

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