PHP等式(== double等于)和identity(=== triple equals)比较运算符有什么不同?

=====什么区别?

  • 松散的==比较工作究竟如何?
  • 严格===比较的工作原理是什么?
  • 什么会是一些有用的例子?


    =====之间的区别

    松散==相等运算符和严格===相同运算符之间的区别在手册中有详细说明:

    比较运算符

    ┌──────────┬───────────┬───────────────────────────────────────────────────────────┐
    │ Example  │ Name      │ Result                                                    │
    ├──────────┼───────────┼───────────────────────────────────────────────────────────┤
    │$a ==  $b │ Equal     │ TRUE if $a is equal to $b after type juggling.            │
    │$a === $b │ Identical │ TRUE if $a is equal to $b, and they are of the same type. │
    └──────────┴───────────┴───────────────────────────────────────────────────────────┘
    

    松散==相等的比较

    如果您正在使用==运算符或任何其他使用松散比较(例如!=<>==比较运算符,则必须始终查看上下文以查看哪些内容以及为什么会转换为了解什么内容正在进行。

    转换规则

  • 转换为布尔值
  • 转换为整数
  • 转换为浮动
  • 转换为字符串
  • 转换为数组
  • 转换为对象
  • 转换为资源
  • 转换为NULL
  • 类型比较表

    作为参考和例子,您可以在手册中看到比较表:

    ==进行比较

    ┌─────────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬─────────┬───────┬───────┐
    │         │ TRUE  │ FALSE │   1   │   0   │  -1   │  "1"  │  "0"  │ "-1"  │ NULL  │ array() │ "php" │  ""   │
    ├─────────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼─────────┼───────┼───────┤
    │ TRUE    │ TRUE  │ FALSE │ TRUE  │ FALSE │ TRUE  │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE   │ TRUE  │ FALSE │
    │ FALSE   │ FALSE │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ TRUE  │ TRUE    │ FALSE │ TRUE  │
    │ 1       │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ 0       │ FALSE │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ TRUE  │ FALSE   │ TRUE  │ TRUE  │
    │ -1      │ TRUE  │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ "1"     │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ "0"     │ FALSE │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ "-1"    │ TRUE  │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ NULL    │ FALSE │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ TRUE    │ FALSE │ TRUE  │
    │ array() │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ TRUE    │ FALSE │ FALSE │
    │ "php"   │ TRUE  │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ TRUE  │ FALSE │
    │ ""      │ FALSE │ TRUE  │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE   │ FALSE │ TRUE  │
    └─────────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴─────────┴───────┴───────┘
    

    严格===相同的比较

    如果您正在使用===运算符或使用严格比较的任何其他比较运算符(例如!===== ,那么您始终可以确定这些类型不会奇迹般地更改,因为不会有转换继续。 因此,通过严格比较,类型和价值必须相同,而不仅仅是价值。

    类型比较表

    作为参考和例子,您可以在手册中看到比较表:

    严格与===比较

    ┌─────────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬─────────┬───────┬───────┐
    │         │ TRUE  │ FALSE │   1   │   0   │  -1   │  "1"  │  "0"  │ "-1"  │ NULL  │ array() │ "php" │  ""   │
    ├─────────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼─────────┼───────┼───────┤
    │ TRUE    │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ FALSE   │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ 1       │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ 0       │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ -1      │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ "1"     │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ "0"     │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ "-1"    │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE │ FALSE   │ FALSE │ FALSE │
    │ NULL    │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE  │ FALSE   │ FALSE │ FALSE │
    │ array() │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ TRUE    │ FALSE │ FALSE │
    │ "php"   │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ TRUE  │ FALSE │
    │ ""      │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE │ FALSE   │ FALSE │ TRUE  │
    └─────────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴─────────┴───────┴───────┘
    

    运算符==在两种不同类型之间转换,而===运算符执行“类型安全比较”。 这意味着只有两个操作数具有相同类型和相同值时才会返回true。

    例子:

    1 === 1: true
    1 == 1: true
    1 === "1": false // 1 is an integer, "1" is a string
    1 == "1": true // "1" gets casted to an integer, which is 1
    "foo" === "foo": true // both operands are strings and have the same value

    警告 :具有等同成员的同一类的两个实例不匹配===运算符。 例:

    $a = new stdClass();
    $a->foo = "bar";
    $b = clone $a;
    var_dump($a === $b); // bool(false)
    

    关于JavaScript:

    ===运算符与==运算符的工作方式相同,但它要求其操作数不仅具有相同的值,而且具有相同的数据类型。

    例如,下面的示例将显示“x和y相等”,但不是“x和y相同”。

    var x = 4;
    var y = '4';
    if (x == y) {
        alert('x and y are equal');
    }
    if (x === y) {
        alert('x and y are identical');
    }
    
    链接地址: http://www.djcxy.com/p/6443.html

    上一篇: How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

    下一篇: How to Get Recursive List of Dependencies