杂耍和(严格)大/小

PHP以其类型杂耍而闻名。 我必须承认这使我困惑,而且我很难在比较中找出基本的逻辑/基本的东西。

例如:如果$a > $b为真并且$b > $c为真,那么它是否意味着$a > $c总是真的?

遵循基本的逻辑,我会说是的,但我很困惑,我不太信任PHP。 也许有人可以提供一个例子,如果情况并非如此?

另外,我想知道严格的小于和严格的大于运算符(因为它们的含义被严格地描述为我只在过去从平等比较中知道),如果左和右操作数交换严格不平等的价值观:

# Precondition:
if ($a === $b) {
    throw new Exception(
       'Both are strictly equal - can not compare strictly for greater or smaller'
    );
}

($a > $b) !== ($b > $a)

对于大多数类型比较组合,这些较大/较小的比较运算符没有记录,因此在这种情况下阅读手册并没有真正的帮助。


PHP的比较运算符在几个方面偏离了计算机科学的定义:

为了构成等价关系, ==必须是自反的,对称的和传递的:

  • PHP的==运算符不是自反的 ,即$a == $a并不总是对的:

    var_dump(NAN == NAN); // bool(false)
    

    注意:涉及NAN任何比较总是为false的事实并不特定于PHP。 它是IEEE 754浮点运算标准的要求(更多信息)。

  • PHP的==运算符是对称的 ,即$a == $b$b == $a总是相同的。

  • PHP的==操作符不传递的 ,即$a == $b$b == $c 遵循$a == $c

    var_dump(true == "a"); // bool(true)
    var_dump("a" == 0);    // bool(true)
    var_dump(true == 0);   // bool(false)
    
  • 为了构成偏序<= / >=必须是自反的,反对称和传递性的:

  • PHP的<=运算符不是自反的 ,即$a <= $a并不总是如此(例子与==相同)。

  • PHP的<=运算符不是反对称的 ,即从$a <= $b$b <= $a不符合$a == $b

    var_dump(NAN <= "foo"); // bool(true)
    var_dump("foo" <= NAN); // bool(true)
    var_dump(NAN == "foo"); // bool(false)
    
  • PHP的<=运算符不是传递的 ,即从$a <= $b$b <= $c不跟随$a <= $c (例子与==相同)。

  • 额外:PHP的<=运算符不是总数 ,即$a <= $b$b <= $a都可以是false:

    var_dump(new stdClass <= new DateTime); // bool(false)
    var_dump(new DateTime <= new stdClass); // bool(false)
    
  • 为了构成一个严格的偏序< / >必须是非反射的,不对称的和传递性的:

  • PHP的<操作符是不反射的 ,即$a < $a永远不会是真的。 请注意,这仅在PHP 5.4时才是真实的。 以前INF < INF评估为true

  • PHP的<运算符不是不对称的 ,即从$a < $b不跟随!($b < $a) (示例与<=不是反对称)相同。

  • PHP的<操作符不是传递的 ,即从$a < $b$b < $c不跟随$a < $c

    var_dump(-INF < 0);    // bool(true)
    var_dump(0 < TRUE);    // bool(true)
    var_dump(-INF < TRUE); // bool(false)
    
  • 额外:PHP的<运算符不是三元的 ,也就是说, $a < $b$b < $a$a == $b都可以是假的(例子相同于<=不是总数)。

  • 额外:PHP的<运算符可以是循环的 ,即可能$a < $b$b < $c$c < $a

    var_dump(INF < []);           // bool(true)
    var_dump([] < new stdClass);  // bool(true)
    var_dump(new stdClass < INF); // bool(true)
    

    注意:上面的例子抛出了“class stdClass的对象无法转换为double”通知。

  • 您可以在PHP悲伤52 - 比较运算符上找到一些关于PHP比较运算符的漂亮图表。

    作为最后一点,我想指出的是PHP确实有两个平等点(不像其他所有内容)。 这两者总是成立,只是因为编译器会将其中一个减少到另一个:

    ($a > $b) == ($b < $a)
    ($a >= $b) == ($b <= $a)
    

    PHP中没有严格相同的比较运算符( >==<== )(至少PHP 5.6.14),但有几种方法在检查Greater / Lower之前执行严格类型检查

  • if (gettype($a) === gettype($b))检查两个变量类型
  • 强制你需要的类型转换例如。 if ((string)$a === (string)$b)
  • 强制你需要的类型 - 例如。 if (($a . '') === ($b . ''))
  • 请注意:

  • 浮点精度有限
  • INFNAN是型的float下IEEE754
  • 一些Infinity等于其他Infinity(自PHP 5.4起)
  • 科学记数法e始终为float类型,即使数字很小也不会integer
  • 整数遍历PHP_INT_MAX会自动转换为float
  • 漂浮在系统的边界上获得INF
  • 未定义变量的类型和值为NULL
  • 0结尾的整数从八进制转换为十进制(按照惯例)
  • 将包含具有前导0的整数的字符串转换为整数将去除前导0
  • 一些奇特的比较列表:

    Very strange:
         $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
      float(NAN)    float(-INF)     false   false   false   false   false   false
      float(NAN)      float(0)      false   false   false   false   false   false
      float(NAN)      float(1)      false   false   false   false   false   false
      float(NAN)     float(INF)     false   false   false   false   false   false
      float(NAN)     float(NAN)     false   false   false   false   false   false
      float(NAN)      int(-1)       false   false   false   false   false   false
      float(NAN)       int(0)       false   false   false   false   false   false
      float(NAN)       int(1)       false   false   false   false   false   false
    

    相同但不相同:

         $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
    
      NULL(NULL)      array()       false   false    true    true    true   false
      NULL(NULL)    bool(false)     false   false    true    true    true   false
      NULL(NULL)      float(0)      false   false    true    true    true   false
      NULL(NULL)       int(0)       false   false    true    true    true   false
      NULL(NULL)      str('')       false   false    true    true    true   false
       array()      bool(false)     false   false    true    true    true   false
     bool(false)      float(0)      false   false    true    true    true   false
     bool(false)       int(0)       false   false    true    true    true   false
       str('')      bool(false)     false   false    true    true    true   false
     bool(false)      str('0')      false   false    true    true    true   false
     float(-INF)     bool(true)     false   false    true    true    true   false
      bool(true)      float(1)      false   false    true    true    true   false
      float(INF)     bool(true)     false   false    true    true    true   false
      float(NAN)     bool(true)     false   false    true    true    true   false
      bool(true)      int(-1)       false   false    true    true    true   false
      bool(true)       int(1)       false   false    true    true    true   false
      bool(true)     str("")      false   false    true    true    true   false
      bool(true)      str('+')      false   false    true    true    true   false
      bool(true)      str('-')      false   false    true    true    true   false
      bool(true)     str('01')      false   false    true    true    true   false
      bool(true)      str('1')      false   false    true    true    true   false
      bool(true)    str('false')    false   false    true    true    true   false
     str('text')     bool(true)     false   false    true    true    true   false
     str('true')     bool(true)     false   false    true    true    true   false
        int(0)        float(0)      false   false    true    true    true   false
      str("")       float(0)      false   false    true    true    true   false
       str('')        float(0)      false   false    true    true    true   false
       str('+')       float(0)      false   false    true    true    true   false
       str('-')       float(0)      false   false    true    true    true   false
       str('0')       float(0)      false   false    true    true    true   false
     str('false')     float(0)      false   false    true    true    true   false
     str('text')      float(0)      false   false    true    true    true   false
     str('true')      float(0)      false   false    true    true    true   false
        int(1)        float(1)      false   false    true    true    true   false
       float(1)      str('01')      false   false    true    true    true   false
       float(1)       str('1')      false   false    true    true    true   false
      str("")        int(0)       false   false    true    true    true   false
       str('')         int(0)       false   false    true    true    true   false
       str('+')        int(0)       false   false    true    true    true   false
       str('-')        int(0)       false   false    true    true    true   false
        int(0)        str('0')      false   false    true    true    true   false
     str('false')      int(0)       false   false    true    true    true   false
     str('text')       int(0)       false   false    true    true    true   false
     str('true')       int(0)       false   false    true    true    true   false
        int(1)       str('01')      false   false    true    true    true   false
        int(1)        str('1')      false   false    true    true    true   false
       str('1')      str('01')      false   false    true    true    true   false
    

    同时降低和更大?

         $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
      float(NAN)     str("")       true    true    true    true   false   false
      float(NAN)      str('')        true    true    true    true   false   false
      float(NAN)      str('+')       true    true    true    true   false   false
      float(NAN)      str('-')       true    true    true    true   false   false
      float(NAN)      str('0')       true    true    true    true   false   false
      float(NAN)     str('01')       true    true    true    true   false   false
      float(NAN)      str('1')       true    true    true    true   false   false
      float(NAN)    str('false')     true    true    true    true   false   false
      float(NAN)    str('text')      true    true    true    true   false   false
      float(NAN)    str('true')      true    true    true    true   false   false
    

    相同且相同:

         $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
      NULL(NULL)     NULL(NULL)     false   false    true    true    true    true
     float(-INF)    float(-INF)     false   false    true    true    true    true
      float(INF)     float(INF)     false   false    true    true    true    true
    

    更低或更高:

         $a      VS.     $b         $a>$b   $a<$b   $a<=$b  $a>=$b  $a==$b  $a===$b
    
      NULL(NULL)     bool(true)     false    true    true   false   false   false
     float(-INF)     NULL(NULL)      true   false   false    true   false   false
      NULL(NULL)      float(1)      false    true    true   false   false   false
      float(INF)     NULL(NULL)      true   false   false    true   false   false
      float(NAN)     NULL(NULL)      true   false   false    true   false   false
      NULL(NULL)      int(-1)       false    true    true   false   false   false
      NULL(NULL)       int(1)       false    true    true   false   false   false
      NULL(NULL)     str("")      false    true    true   false   false   false
      NULL(NULL)      str('+')      false    true    true   false   false   false
      NULL(NULL)      str('-')      false    true    true   false   false   false
      NULL(NULL)      str('0')      false    true    true   false   false   false
      NULL(NULL)     str('01')      false    true    true   false   false   false
      NULL(NULL)      str('1')      false    true    true   false   false   false
      NULL(NULL)    str('false')    false    true    true   false   false   false
      NULL(NULL)    str('text')     false    true    true   false   false   false
      NULL(NULL)    str('true')     false    true    true   false   false   false
       array()       bool(true)     false    true    true   false   false   false
     float(-INF)      array()       false    true    true   false   false   false
       array()        float(0)       true   false   false    true   false   false
       array()        float(1)       true   false   false    true   false   false
      float(INF)      array()       false    true    true   false   false   false
      float(NAN)      array()       false    true    true   false   false   false
       array()        int(-1)        true   false   false    true   false   false
       array()         int(0)        true   false   false    true   false   false
       array()         int(1)        true   false   false    true   false   false
       array()       str("")       true   false   false    true   false   false
       str('')        array()       false    true    true   false   false   false
       array()        str('+')       true   false   false    true   false   false
       array()        str('-')       true   false   false    true   false   false
       array()        str('0')       true   false   false    true   false   false
       array()       str('01')       true   false   false    true   false   false
       array()        str('1')       true   false   false    true   false   false
       array()      str('false')     true   false   false    true   false   false
       array()      str('text')      true   false   false    true   false   false
       array()      str('true')      true   false   false    true   false   false
      bool(true)    bool(false)      true   false   false    true   false   false
     float(-INF)    bool(false)      true   false   false    true   false   false
       float(1)     bool(false)      true   false   false    true   false   false
      float(INF)    bool(false)      true   false   false    true   false   false
      float(NAN)    bool(false)      true   false   false    true   false   false
     bool(false)      int(-1)       false    true    true   false   false   false
        int(1)      bool(false)      true   false   false    true   false   false
     bool(false)     str("")      false    true    true   false   false   false
     bool(false)      str('+')      false    true    true   false   false   false
     bool(false)      str('-')      false    true    true   false   false   false
     bool(false)     str('01')      false    true    true   false   false   false
       str('1')     bool(false)      true   false   false    true   false   false
     bool(false)    str('false')    false    true    true   false   false   false
     str('text')    bool(false)      true   false   false    true   false   false
     str('true')    bool(false)      true   false   false    true   false   false
      bool(true)      float(0)       true   false   false    true   false   false
      bool(true)       int(0)        true   false   false    true   false   false
       str('')       bool(true)     false    true    true   false   false   false
      bool(true)      str('0')       true   false   false    true   false   false
     float(-INF)      float(0)      false    true    true   false   false   false
     float(-INF)      float(1)      false    true    true   false   false   false
      float(INF)    float(-INF)      true   false   false    true   false   false
     float(-INF)      int(-1)       false    true    true   false   false   false
     float(-INF)       int(0)       false    true    true   false   false   false
     float(-INF)       int(1)       false    true    true   false   false   false
     float(-INF)     str("")      false    true    true   false   false   false
     float(-INF)      str('')       false    true    true   false   false   false
     float(-INF)      str('+')      false    true    true   false   false   false
     float(-INF)      str('-')      false    true    true   false   false   false
     float(-INF)      str('0')      false    true    true   false   false   false
     float(-INF)     str('01')      false    true    true   false   false   false
     float(-INF)      str('1')      false    true    true   false   false   false
     float(-INF)    str('false')    false    true    true   false   false   false
     float(-INF)    str('text')     false    true    true   false   false   false
     float(-INF)    str('true')     false    true    true   false   false   false
       float(1)       float(0)       true   false   false    true   false   false
      float(INF)      float(0)       true   false   false    true   false   false
       float(0)       int(-1)        true   false   false    true   false   false
        int(1)        float(0)       true   false   false    true   false   false
       float(0)      str('01')      false    true    true   false   false   false
       str('1')       float(0)       true   false   false    true   false   false
      float(INF)      float(1)       true   false   false    true   false   false
       float(1)       int(-1)        true   false   false    true   false   false
       float(1)        int(0)        true   false   false    true   false   false
       float(1)      str("")       true   false   false    true   false   false
       str('')        float(1)      false    true    true   false   false   false
       float(1)       str('+')       true   false   false    true   false   false
       float(1)       str('-')       true   false   false    true   false   false
       float(1)       str('0')       true   false   false    true   false   false
       float(1)     str('false')     true   false   false    true   false   false
     str('text')      float(1)      false    true    true   false   false   false
     str('true')      float(1)      false    true    true   false   false   false
      float(INF)      int(-1)        true   false   false    true   false   false
      float(INF)       int(0)        true   false   false    true   false   false
      float(INF)       int(1)        true   false   false    true   false   false
      float(INF)     str("")       true   false   false    true   false   false
      float(INF)      str('')        true   false   false    true   false   false
      float(INF)      str('+')       true   false   false    true   false   false
      float(INF)      str('-')       true   false   false    true   false   false
      float(INF)      str('0')       true   false   false    true   false   false
      float(INF)     str('01')       true   false   false    true   false   false
      float(INF)      str('1')       true   false   false    true   false   false
      float(INF)    str('false')     true   false   false    true   false   false
      float(INF)    str('text')      true   false   false    true   false   false
      float(INF)    str('true')      true   false   false    true   false   false
        int(0)        int(-1)        true   false   false    true   false   false
        int(1)        int(-1)        true   false   false    true   false   false
      str("")       int(-1)        true   false   false    true   false   false
       str('')        int(-1)        true   false   false    true   false   false
       str('+')       int(-1)        true   false   false    true   false   false
       str('-')       int(-1)        true   false   false    true   false   false
       str('0')       int(-1)        true   false   false    true   false   false
       int(-1)       str('01')      false    true    true   false   false   false
       str('1')       int(-1)        true   false   false    true   false   false
     str('false')     int(-1)        true   false   false    true   false   false
     str('text')      int(-1)        true   false   false    true   false   false
     str('true')      int(-1)        true   false   false    true   false   false
        int(1)         int(0)        true   false   false    true   false   false
        int(0)       str('01')      false    true    true   false   false   false
       str('1')        int(0)        true   false   false    true   false   false
        int(1)       str("")       true   false   false    true   false   false
       str('')         int(1)       false    true    true   false   false   false
        int(1)        str('+')       true   false   false    true   false   false
        int(1)        str('-')       true   false   false    true   false   false
        int(1)        str('0')       true   false   false    true   false   false
        int(1)      str('false')     true   false   false    true   false   false
     str('text')       int(1)       false    true    true   false   false   false
     str('true')       int(1)       false    true    true   false   false   false
       str('')       str("")      false    true    true   false   false   false
       str('+')      str("")       true   false   false    true   false   false
       str('-')      str("")       true   false   false    true   false   false
      str("")       str('0')      false    true    true   false   false   false
      str("")      str('01')      false    true    true   false   false   false
       str('1')      str("")       true   false   false    true   false   false
     str('false')    str("")       true   false   false    true   false   false
     str('text')     str("")       true   false   false    true   false   false
     str('true')     str("")       true   false   false    true   false   false
       str('')        str('+')      false    true    true   false   false   false
       str('')        str('-')      false    true    true   false   false   false
       str('')        str('0')      false    true    true   false   false   false
       str('')       str('01')      false    true    true   false   false   false
       str('')        str('1')      false    true    true   false   false   false
       str('')      str('false')    false    true    true   false   false   false
       str('')      str('text')     false    true    true   false   false   false
       str('')      str('true')     false    true    true   false   false   false
       str('-')       str('+')       true   false   false    true   false   false
       str('+')       str('0')      false    true    true   false   false   false
       str('+')      str('01')      false    true    true   false   false   false
       str('1')       str('+')       true   false   false    true   false   false
     str('false')     str('+')       true   false   false    true   false   false
     str('text')      str('+')       true   false   false    true   false   false
     str('true')      str('+')       true   false   false    true   false   false
       str('-')       str('0')      false    true    true   false   false   false
       str('-')      str('01')      false    true    true   false   false   false
       str('1')       str('-')       true   false   false    true   false   false
     str('false')     str('-')       true   false   false    true   false   false
     str('text')      str('-')       true   false   false    true   false   false
     str('true')      str('-')       true   false   false    true   false   false
       str('0')      str('01')      false    true    true   false   false   false
       str('1')       str('0')       true   false   false    true   false   false
     str('false')     str('0')       true   false   false    true   false   false
     str('text')      str('0')       true   false   false    true   false   false
     str('true')      str('0')       true   false   false    true   false   false
     str('false')    str('01')       true   false   false    true   false   false
     str('text')     str('01')       true   false   false    true   false   false
     str('true')     str('01')       true   false   false    true   false   false
       str('1')     str('false')    false    true    true   false   false   false
     str('text')      str('1')       true   false   false    true   false   false
     str('true')      str('1')       true   false   false    true   false   false
     str('text')    str('false')     true   false   false    true   false   false
     str('true')    str('false')     true   false   false    true   false   false
     str('true')    str('text')      true   false   false    true   false   false
    

    $a > $b > $c在以下情况下出现难题: $a不大于$c

    A<C   : float(NAN)  >  str('a')   >   str('')
    A<C   : float(NAN)  >  str('a')   >   str('1')
    A<C   : float(NAN)  >  str('a')   >   str('A')
    A<C   : float(NAN)  >  str('a')   >   str('0')
    A<C   : float(NAN)  >  str('1')   >   str('')
    A<C   : float(NAN)  >  str('1')   >   str('0')
    A<C   : float(NAN)  >  str('A')   >   str('')
    A<C   : float(NAN)  >  str('A')   >   str('1')
    A<C   : float(NAN)  >  str('A')   >   str('0')
    A<C   : float(NAN)  >  str('0')   >   str('')
    A<C   :   str('')   > float(NAN)  >   str('a')
    A<C   :   str('')   > float(NAN)  >   str('1')
    A<C   :   str('')   > float(NAN)  >   str('A')
    A<C   :   str('')   > float(NAN)  >   str('0')
    A<C   :  str('a')   >   str('')   >  float(NAN)
    A<C   :  str('a')   >  str('1')   >  float(NAN)
    A<C   :  str('a')   >  str('A')   >  float(NAN)
    A<C   :  str('a')   >  str('0')   >  float(NAN)
    A<C   :  str('0')   >   str('')   >  float(NAN)
    A==C  : bool(true)  >   str('')   >  float(NAN)
    A==C  : bool(true)  >   str('')   > float(-INF)
    A==C  : bool(true)  >   str('')   >   int(-1)
    A==C  : bool(true)  >   str('')   >  float(-1)
    A==C  : bool(true)  >   array()   >  float(NAN)
    A==C  : bool(true)  >   array()   >  float(INF)
    A==C  : bool(true)  >   array()   > float(-INF)
    A==C  : bool(true)  >   array()   >   str('a')
    A==C  : bool(true)  >   array()   >    int(1)
    A==C  : bool(true)  >   array()   >   float(1)
    A==C  : bool(true)  >   array()   >   str('1')
    A==C  : bool(true)  >   array()   >   str('A')
    A==C  : bool(true)  >   array()   >   int(-1)
    A==C  : bool(true)  >   array()   >  float(-1)
    A==C  : bool(true)  >   int(0)    > float(-INF)
    A==C  : bool(true)  >   int(0)    >   int(-1)
    A==C  : bool(true)  >   int(0)    >  float(-1)
    A==C  : bool(true)  >  str('0')   >  float(NAN)
    A==C  : bool(true)  >  str('0')   > float(-INF)
    A==C  : bool(true)  >  str('0')   >   int(-1)
    A==C  : bool(true)  >  str('0')   >  float(-1)
    A==C  : bool(true)  >  float(0)   > float(-INF)
    A==C  : bool(true)  >  float(0)   >   int(-1)
    A==C  : bool(true)  >  float(0)   >  float(-1)
    A==C  :   int(1)    >  str('a')   >   str('1')
    A==C  :   int(1)    >  str('A')   >   str('1')
    A==C  :  float(1)   >  str('a')   >   str('1')
    A==C  :  float(1)   >  str('A')   >   str('1')
    A==C  :  str('a')   >  str('1')   >    int(0)
    A==C  :  str('a')   >  str('1')   >   float(0)
    A==C  :   str('')   > float(-INF) >  NULL(NULL)
    A==C  :   str('')   > float(-INF) > bool(false)
    A==C  :   str('')   >   int(-1)   >  NULL(NULL)
    A==C  :   str('')   >   int(-1)   > bool(false)
    A==C  :   str('')   >  float(-1)  >  NULL(NULL)
    A==C  :   str('')   >  float(-1)  > bool(false)
    A==C  :   array()   > float(NAN)  >  NULL(NULL)
    A==C  :   array()   > float(NAN)  > bool(false)
    A==C  :   array()   > float(INF)  >  NULL(NULL)
    A==C  :   array()   > float(INF)  > bool(false)
    A==C  :   array()   > float(-INF) >  NULL(NULL)
    A==C  :   array()   > float(-INF) > bool(false)
    A==C  :   array()   >  str('a')   >  NULL(NULL)
    A==C  :   array()   >  str('a')   > bool(false)
    A==C  :   array()   >   int(1)    >  NULL(NULL)
    A==C  :   array()   >   int(1)    > bool(false)
    A==C  :   array()   >  float(1)   >  NULL(NULL)
    A==C  :   array()   >  float(1)   > bool(false)
    A==C  :   array()   >  str('1')   >  NULL(NULL)
    A==C  :   array()   >  str('1')   > bool(false)
    A==C  :   array()   >  str('A')   >  NULL(NULL)
    A==C  :   array()   >  str('A')   > bool(false)
    A==C  :   array()   >  str('0')   >  NULL(NULL)
    A==C  :   array()   >   int(-1)   >  NULL(NULL)
    A==C  :   array()   >   int(-1)   > bool(false)
    A==C  :   array()   >  float(-1)  >  NULL(NULL)
    A==C  :   array()   >  float(-1)  > bool(false)
    A==C  :   str('')   > float(NAN)  > bool(false)
    A==C  :   str('')   > float(NAN)  >  NULL(NULL)
    A==C  :  str('A')   >  str('1')   >    int(0)
    A==C  :  str('A')   >  str('1')   >   float(0)
    A==C  :   int(0)    > float(-INF) >  NULL(NULL)
    A==C  :   int(0)    > float(-INF) > bool(false)
    A==C  :   int(0)    >   int(-1)   >  NULL(NULL)
    A==C  :   int(0)    >   int(-1)   > bool(false)
    A==C  :   int(0)    >  float(-1)  >  NULL(NULL)
    A==C  :   int(0)    >  float(-1)  > bool(false)
    A==C  :  str('0')   > float(NAN)  > bool(false)
    A==C  :  str('0')   > float(-INF) > bool(false)
    A==C  :  str('0')   >   int(-1)   > bool(false)
    A==C  :  str('0')   >  float(-1)  > bool(false)
    A==C  :  float(0)   > float(-INF) >  NULL(NULL)
    A==C  :  float(0)   > float(-INF) > bool(false)
    A==C  :  float(0)   >   int(-1)   >  NULL(NULL)
    A==C  :  float(0)   >   int(-1)   > bool(false)
    A==C  :  float(0)   >  float(-1)  >  NULL(NULL)
    A==C  :  float(0)   >  float(-1)  > bool(false)
    A===C :  str('0')   > float(NAN)  >   str('0')
    A===C :   str('')   > float(NAN)  >   str('')
    A===C :  str('a')   > float(NAN)  >   str('a')
    A===C :  str('1')   > float(NAN)  >   str('1')
    A===C :  str('A')   > float(NAN)  >   str('A')
    

    有趣的字符串比较:'女王' > '国王' > '杰克' > '王牌'

    还要检查一下PHP类型比较表,其中包含对:

  • isset()is_null()
  • if()empty()
  • 布尔=====
  • 检查现在的PHP版本之间的差异。 http://3v4l.org/MAfDu。


    在您对问题的第二部分进行更正之后,我将该部分的答案留给其他人。 我只想给你的问题的第一部分提供最令人惊讶的答案,即是否存在一个<>运算符不灵敏的例子。 这里是。

    这些都是true

    "10" < "1a"
    "1a" < "2"
    "10" > "2"
    

    如果<传递( $a < $b ^ $b < $c $a < $c ),最后一行将是

    "10" < "2"
    

    但PHP会尽量善良(?!),并在任何时候将字符串解释为数字。

    事实证明,由于上述不灵敏性, 即使没有两个元素== (并且没有元素是NAN), sort()也可以根据它们的输入顺序将相同的元素排序为不同的顺序。 我在对sort()的评论中指出了这一点,其实质是:

    sort(array("10", "1a", "2" )) => array("10", "1a", "2" )
    sort(array("10", "2",  "1a")) => array("1a", "2",  "10")
    sort(array("1a", "10", "2" )) => array("2",  "10", "1a")
    sort(array("1a", "2",  "10")) => array("1a", "2",  "10")
    sort(array("2",  "10", "1a")) => array("2",  "10", "1a")
    sort(array("2",  "1a", "10")) => array("10", "1a", "2" )
    
    链接地址: http://www.djcxy.com/p/1795.html

    上一篇: juggling and (strict) greater/lesser

    下一篇: PHP != and == operators