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

前端 未结 11 2128
故里飘歌
故里飘歌 2020-11-22 16:52

What is the difference between == and === in PHP?

What would be some useful examples?


Additionally, how are these operators us

11条回答
  •  庸人自扰
    2020-11-22 17:19

    {$name} = $value;
            }
        }
    
        class Bar
        {
        }
        // 1. Object handles or references
        // Is an object a reference to itself or a clone or totally a different object?
        //
        //   ==  true   Name of two objects are same, for example, Foo() and Foo()
        //   ==  false  Name of two objects are different, for example, Foo() and Bar()
        //   === true   ID of two objects are same, for example, 1 and 1
        //   === false  ID of two objects are different, for example, 1 and 2
    
        echo "1. Object handles or references (both == and    ===) 
    "; $bar = new Foo(); // New object Foo() created $bar2 = new Foo(); // New object Foo() created $baz = clone $bar; // Object Foo() cloned $qux = $bar; // Object Foo() referenced $norf = new Bar(); // New object Bar() created echo "bar"; var_dump($bar); echo "baz"; var_dump($baz); echo "qux"; var_dump($qux); echo "bar2"; var_dump($bar2); echo "norf"; var_dump($norf); // Clone: == true and === false echo '$bar == $bar2'; var_dump($bar == $bar2); // true echo '$bar === $bar2'; var_dump($bar === $bar2); // false echo '$bar == $baz'; var_dump($bar == $baz); // true echo '$bar === $baz'; var_dump($bar === $baz); // false // Object reference: == true and === true echo '$bar == $qux'; var_dump($bar == $qux); // true echo '$bar === $qux'; var_dump($bar === $qux); // true // Two different objects: == false and === false echo '$bar == $norf'; var_dump($bar == $norf); // false echo '$bar === $norf'; var_dump($bar === $norf); // false // 2. Instances with matching attributes and its values (only ==). // What happens when objects (even in cloned object) have same // attributes but varying values? // $foobar value is different echo "2. Instances with matching attributes and its values (only ==)
    "; $baz->foobar = 2; echo '$foobar' . " value is different
    "; echo '$bar->foobar = ' . $bar->foobar . "
    "; echo '$baz->foobar = ' . $baz->foobar . "
    "; echo '$bar == $baz'; var_dump($bar == $baz); // false // $foobar's value is the same again $baz->foobar = 1; echo '$foobar' . " value is the same again
    "; echo '$bar->foobar is ' . $bar->foobar . "
    "; echo '$baz->foobar is ' . $baz->foobar . "
    "; echo '$bar == $baz'; var_dump($bar == $baz); // true // Changing values of properties in $qux object will change the property // value of $bar and evaluates true always, because $qux = &$bar. $qux->foobar = 2; echo '$foobar value of both $qux and $bar is 2, because $qux = &$bar' . "
    "; echo '$qux->foobar is ' . $qux->foobar . "
    "; echo '$bar->foobar is ' . $bar->foobar . "
    "; echo '$bar == $qux'; var_dump($bar == $qux); // true // 3. Instances with different attributes (only ==) // What happens when objects have different attributes even though // one of the attributes has same value? echo "3. Instances with different attributes (only ==)
    "; // Dynamically create a property with the name in $name and value // in $value for baz object $name = 'newproperty'; $value = null; $baz->createNewProperty($name, $value); echo '$baz->newproperty is ' . $baz->{$name}; var_dump($baz); $baz->foobar = 2; echo '$foobar' . " value is same again
    "; echo '$bar->foobar is ' . $bar->foobar . "
    "; echo '$baz->foobar is ' . $baz->foobar . "
    "; echo '$bar == $baz'; var_dump($bar == $baz); // false var_dump($bar); var_dump($baz); ?>

提交回复
热议问题