PHP 中的类型杂耍和(严格)大于/小于比较

2022-08-30 07:16:14

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)

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


答案 1

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

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

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

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

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

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

  • PHP 的运算符不是可传递的,即 from 和不遵循 :==$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 的运算符不是可传递的,即 from 和不跟随(示例与 )。<=$a <= $b$b <= $c$a <= $c==

  • 额外:PHP的运算符不是全部,即两者都可以是假的:<=$a <= $b$b <= $a

    var_dump(new stdClass <= new DateTime); // bool(false)
    var_dump(new DateTime <= new stdClass); // bool(false)
    

为了构成严格的偏序/必须是非反身的,不对称的和传递的:<>

  • PHP的运算符是非自反的,即 从来都不是真的。请注意,这仅在 PHP 5.4 中是正确的。先前评估为 。<$a < $aINF < INFtrue

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

  • PHP 的运算符不是可传递的,即 from 和不遵循 :<$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 的运算符不是三分法,即所有 ,并且可以是 false(示例与非全部相同)。<$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)
    

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

你可以在 PHP Sadness 52 - Comparison operator 上找到 PHP 比较运算符的一些不错的图表。

作为最后一点,我想指出PHP确实保证了两个平等性(与其他几乎所有东西都不同)。这两者始终成立,仅仅是因为编译器将一个简化为另一个:

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

答案 2

PHP中没有严格相同的比较运算符(或)(至少通过PHP 5.6.14),但是在检查Grear/Lower之前,有几种方法可以强制执行严格的类型检查:>==<==

  1. 检查两种变量类型if (gettype($a) === gettype($b))
  2. 强制您需要的类型转换,例如。if ((string)$a === (string)$b)
  3. 强制你所需的类型杂耍,例如。if (($a . '') === ($b . ''))

请注意:

  • 浮点精度有限
  • INF并且类型符合 NANfloat
  • 某些无穷大等于其他无穷大(自 PHP 5.4 起)
  • 科学记数法总是类型,即使数字很小,也永远不会efloatinteger
  • 经过的整数会自动转换为PHP_INT_MAXfloat
  • 在系统边界上浮动可获得值INF
  • 未定义的变量的类型和值NULL
  • 前面的整数从八进制转换为十进制(按照约定)0
  • 将包含前导数的字符串转换为整数会去除前导00

一些异国情调的比较列表:

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("\0")      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("\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('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("\0")        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("\0")       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("\0")      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("\0")       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("\0")      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("\0")      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("\0")       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("\0")       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("\0")       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("\0")       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("\0")      false    true    true   false   false   false
   str('+')      str("\0")       true   false   false    true   false   false
   str('-')      str("\0")       true   false   false    true   false   false
  str("\0")       str('0')      false    true    true   false   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('')        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&ltC   : float(NAN)  &gt  str('a')   &gt   str('')
A&ltC   : float(NAN)  &gt  str('a')   &gt   str('1')
A&ltC   : float(NAN)  &gt  str('a')   &gt   str('A')
A&ltC   : float(NAN)  &gt  str('a')   &gt   str('0')
A&ltC   : float(NAN)  &gt  str('1')   &gt   str('')
A&ltC   : float(NAN)  &gt  str('1')   &gt   str('0')
A&ltC   : float(NAN)  &gt  str('A')   &gt   str('')
A&ltC   : float(NAN)  &gt  str('A')   &gt   str('1')
A&ltC   : float(NAN)  &gt  str('A')   &gt   str('0')
A&ltC   : float(NAN)  &gt  str('0')   &gt   str('')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('a')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('1')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('A')
A&ltC   :   str('')   &gt float(NAN)  &gt   str('0')
A&ltC   :  str('a')   &gt   str('')   &gt  float(NAN)
A&ltC   :  str('a')   &gt  str('1')   &gt  float(NAN)
A&ltC   :  str('a')   &gt  str('A')   &gt  float(NAN)
A&ltC   :  str('a')   &gt  str('0')   &gt  float(NAN)
A&ltC   :  str('0')   &gt   str('')   &gt  float(NAN)
A==C  : bool(true)  &gt   str('')   &gt  float(NAN)
A==C  : bool(true)  &gt   str('')   &gt float(-INF)
A==C  : bool(true)  &gt   str('')   &gt   int(-1)
A==C  : bool(true)  &gt   str('')   &gt  float(-1)
A==C  : bool(true)  &gt   array()   &gt  float(NAN)
A==C  : bool(true)  &gt   array()   &gt  float(INF)
A==C  : bool(true)  &gt   array()   &gt float(-INF)
A==C  : bool(true)  &gt   array()   &gt   str('a')
A==C  : bool(true)  &gt   array()   &gt    int(1)
A==C  : bool(true)  &gt   array()   &gt   float(1)
A==C  : bool(true)  &gt   array()   &gt   str('1')
A==C  : bool(true)  &gt   array()   &gt   str('A')
A==C  : bool(true)  &gt   array()   &gt   int(-1)
A==C  : bool(true)  &gt   array()   &gt  float(-1)
A==C  : bool(true)  &gt   int(0)    &gt float(-INF)
A==C  : bool(true)  &gt   int(0)    &gt   int(-1)
A==C  : bool(true)  &gt   int(0)    &gt  float(-1)
A==C  : bool(true)  &gt  str('0')   &gt  float(NAN)
A==C  : bool(true)  &gt  str('0')   &gt float(-INF)
A==C  : bool(true)  &gt  str('0')   &gt   int(-1)
A==C  : bool(true)  &gt  str('0')   &gt  float(-1)
A==C  : bool(true)  &gt  float(0)   &gt float(-INF)
A==C  : bool(true)  &gt  float(0)   &gt   int(-1)
A==C  : bool(true)  &gt  float(0)   &gt  float(-1)
A==C  :   int(1)    &gt  str('a')   &gt   str('1')
A==C  :   int(1)    &gt  str('A')   &gt   str('1')
A==C  :  float(1)   &gt  str('a')   &gt   str('1')
A==C  :  float(1)   &gt  str('A')   &gt   str('1')
A==C  :  str('a')   &gt  str('1')   &gt    int(0)
A==C  :  str('a')   &gt  str('1')   &gt   float(0)
A==C  :   str('')   &gt float(-INF) &gt  NULL(NULL)
A==C  :   str('')   &gt float(-INF) &gt bool(false)
A==C  :   str('')   &gt   int(-1)   &gt  NULL(NULL)
A==C  :   str('')   &gt   int(-1)   &gt bool(false)
A==C  :   str('')   &gt  float(-1)  &gt  NULL(NULL)
A==C  :   str('')   &gt  float(-1)  &gt bool(false)
A==C  :   array()   &gt float(NAN)  &gt  NULL(NULL)
A==C  :   array()   &gt float(NAN)  &gt bool(false)
A==C  :   array()   &gt float(INF)  &gt  NULL(NULL)
A==C  :   array()   &gt float(INF)  &gt bool(false)
A==C  :   array()   &gt float(-INF) &gt  NULL(NULL)
A==C  :   array()   &gt float(-INF) &gt bool(false)
A==C  :   array()   &gt  str('a')   &gt  NULL(NULL)
A==C  :   array()   &gt  str('a')   &gt bool(false)
A==C  :   array()   &gt   int(1)    &gt  NULL(NULL)
A==C  :   array()   &gt   int(1)    &gt bool(false)
A==C  :   array()   &gt  float(1)   &gt  NULL(NULL)
A==C  :   array()   &gt  float(1)   &gt bool(false)
A==C  :   array()   &gt  str('1')   &gt  NULL(NULL)
A==C  :   array()   &gt  str('1')   &gt bool(false)
A==C  :   array()   &gt  str('A')   &gt  NULL(NULL)
A==C  :   array()   &gt  str('A')   &gt bool(false)
A==C  :   array()   &gt  str('0')   &gt  NULL(NULL)
A==C  :   array()   &gt   int(-1)   &gt  NULL(NULL)
A==C  :   array()   &gt   int(-1)   &gt bool(false)
A==C  :   array()   &gt  float(-1)  &gt  NULL(NULL)
A==C  :   array()   &gt  float(-1)  &gt bool(false)
A==C  :   str('')   &gt float(NAN)  &gt bool(false)
A==C  :   str('')   &gt float(NAN)  &gt  NULL(NULL)
A==C  :  str('A')   &gt  str('1')   &gt    int(0)
A==C  :  str('A')   &gt  str('1')   &gt   float(0)
A==C  :   int(0)    &gt float(-INF) &gt  NULL(NULL)
A==C  :   int(0)    &gt float(-INF) &gt bool(false)
A==C  :   int(0)    &gt   int(-1)   &gt  NULL(NULL)
A==C  :   int(0)    &gt   int(-1)   &gt bool(false)
A==C  :   int(0)    &gt  float(-1)  &gt  NULL(NULL)
A==C  :   int(0)    &gt  float(-1)  &gt bool(false)
A==C  :  str('0')   &gt float(NAN)  &gt bool(false)
A==C  :  str('0')   &gt float(-INF) &gt bool(false)
A==C  :  str('0')   &gt   int(-1)   &gt bool(false)
A==C  :  str('0')   &gt  float(-1)  &gt bool(false)
A==C  :  float(0)   &gt float(-INF) &gt  NULL(NULL)
A==C  :  float(0)   &gt float(-INF) &gt bool(false)
A==C  :  float(0)   &gt   int(-1)   &gt  NULL(NULL)
A==C  :  float(0)   &gt   int(-1)   &gt bool(false)
A==C  :  float(0)   &gt  float(-1)  &gt  NULL(NULL)
A==C  :  float(0)   &gt  float(-1)  &gt bool(false)
A===C :  str('0')   &gt float(NAN)  &gt   str('0')
A===C :   str('')   &gt float(NAN)  &gt   str('')
A===C :  str('a')   &gt float(NAN)  &gt   str('a')
A===C :  str('1')   &gt float(NAN)  &gt   str('1')
A===C :  str('A')   &gt float(NAN)  &gt   str('A')

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

另请查看涵盖对的 PHP 类型比较表

  • isset()is_null()
  • if()empty()
  • 布尔值与=====

检查PHP版本之间的差异。http://3v4l.org/MAfDu


推荐