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

Php 逻辑布尔否定运算符优先级和关联,php,boolean-logic,negation,boolean-algebra,Php,Boolean Logic,Negation,Boolean Algebra,这是我关于StackOverflow的第一个问题,我想以前这里也有人问过,但我在搜索栏中键入的每一个问题都会给我不同的问题。(或者有时根本没有结果!) 我正在学习w3Schools,但我看到了这个看似简单的代码片段,它引发了一小部分问题: 基本上,该守则规定: if(! test === FALSE) display("test successful!"); else display("test failed...") 在这种特殊情况下,“test”在成功时返回字符串,或在失败时返回(

这是我关于StackOverflow的第一个问题,我想以前这里也有人问过,但我在搜索栏中键入的每一个问题都会给我不同的问题。(或者有时根本没有结果!)

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

基本上,该守则规定:

if(! test === FALSE)
  display("test successful!");
else
  display("test failed...")
在这种特殊情况下,“test”在成功时返回字符串,或在失败时返回(布尔)FALSE

以下是在我心中激起的问题

  • 至于条件/if语句开头的感叹号(又名“逻辑非”又名“否定运算符”),是:

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

    B) 仅与“测试”关联

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

  • 我理解否定运算符如何处理布尔值,但是当遇到(PHP)字符串时,否定运算符的行为如何

    A) 如果字符串恰好是像“true”或“0”这样的复杂字符串,则否定运算符的行为是否会改变

  • (!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\u var()比filter\u input()有什么优势吗?为什么w3Schools使用filter_var()而不是filter_input()

  • 正如您在PHP中看到的,操作符具有不同的优先级。它的意思是:
    首先应用于
    $test

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

  • 这是不一样的。当
    $test
    等于空字符串
    '
    '0'
    时,这两种情况具有不同的行为