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

时间:2015-06-02 04:03:27

标签: php boolean-logic negation boolean-algebra

这是我在StackOverflow上的第一个问题,因此我想象之前已经在这里询问了 ,但是我在搜索栏中输入的所有内容都给了我不同的问题。 (或者有时候“没有”结果!)

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

本质上代码说:

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

test ”在这种特殊情况下会在成功时返回一个字符串,或者在失败时返回(布尔值) FALSE

以下是我内心的问题。

  1. 至于条件/ if语句开头的感叹号(又名“Logical NOT”又名“否定运算符”)是:

    A)适用于括号内的整个陈述?或

    B)仅与“测试”相关联?

  2. 注意:否定运算符的关联性可能不会改变此实例中的结果,但其关联性在以下情况下很重要:(!FALSE || TRUE),是吗?

    1. 我理解Negation运算符如何处理布尔值,但是当面对(PHP)字符串时,Negation运算符如何表现?

      A)如果字符串碰巧像“真”或“0”那样棘手,否则否定运算符的行为会改变吗?

    2. (!test === FALSE)(test!== FALSE)相同?为什么他们不只是使用“!==”?

    3. HERE 是有问题的实际代码:

      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 个答案:

答案 0 :(得分:1)

  1. 正如您在PHP中doc运算符中所看到的那样,有不同的优先级。这意味着:!首先应用于$test

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

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