因此,php网站上的此页面显示了比较不同值的结果:

http://php.net/manual/en/types.comparisons.php

这是一个有益的引用,但我宁愿没有我想确保我做的类型比较合适的每次访问此页。所以我的问题是

是否有某种潜在的理念/推理类型比较对PHP背后的逻辑呢?

例如,我可以看到,对于比较宽松:

  • 1,-1, “1” 和 “-1” 可以被视为TRUE和0和 “0” 可以作为FALSE进行处理;
  • 比较针对与产量TRUE数目本身的数的字符串值;

  • 但它成为在试图建立一个模式从此有点毛。

    最佳答案

    对于直接转换为 bool 值,这就是它的工作原理。

  • 所有长度> 0的字符串都是真实的
  • 所有非0数字均为真
  • 所有非空数组均为真
  • 所有对象均为真

  • 然后,这些规则用于比较相同类型的变量:
  • 如果对象的属性相等,则等效。
  • 如果数组的键和元素相等,则等效于
  • 如果它们产生相同的输出
  • ,则字符串是等效的
  • 如果它们在数学上是等效的,则它们是等效的
  • 如果 bool 值相同,则它们是等效的。

  • 对于不同类型的变量,将上面列表中较高的类型转换为较低的类型,然后进行比较。
    ===!==运算符在比较之前不会强制转换,但是您应该注意,如果对象是同一实例,则它们仅是===

    真正奇怪的是数组,如果它们具有以相同顺序定义的相同键和值,则它们是===
    $a = array("a"=>1, "b"=>2);
    $b = array("b"=>2, "a"=>1);
    
    $a == $b; // true
    $a === $b; // false
    

    并且empty()等同于!(bool)$var
    EXCEPTIONS
  • 将数组强制转换为字符串会触发通知,并且无助地将其强制转换为文本Array
  • 将没有__toString方法的对象强制转换为字符串会导致致命错误。
  • 对象不会隐式转换为数组,因此,每当您将对象与数组进行比较时,它都会产生一个错误(即使对象隐含了ArrayAccess接口(interface), UPDATE 确认这是正确的)
  • 09-11 19:51
    查看更多