对象比较

当使用比较运算符 == 比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。而如果使用比较运算符 === ,这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。

<?php

class Foo
{
    /**
     * Just a test property.
     *
     * @var string
     */
    public string $property;

    /**
     * Just a test method.
     *
     * @param  void
     * @return void
     */
    public function method()
    {
        //
    }
}

class Bar
{
    /**
     * Just a test property.
     *
     * @var string
     */
    public string $property;

    /**
     * Just a test method.
     *
     * @param  void
     * @return void
     */
    public function method()
    {
        //
    }
}

$foo = new Foo();
$bar = new Foo();
var_dump($foo == $bar);  // bool(true)
var_dump($foo != $bar);  // bool(false)
var_dump($foo === $bar); // bool(false)
var_dump($foo !== $bar); // bool(true)

$foo = new Foo();
$bar = clone $foo;
var_dump($foo == $bar);  // bool(true)
var_dump($foo != $bar);  // bool(false)
var_dump($foo === $bar); // bool(false)
var_dump($foo !== $bar); // bool(true)

$foo = new Foo();
$foo->property = 'foo';
$bar = new Foo();
$bar->property = 'bar';
var_dump($foo == $bar);  // bool(false)
var_dump($foo != $bar);  // bool(true)
var_dump($foo === $bar); // bool(false)
var_dump($foo !== $bar); // bool(true)

$foo = new Foo();
$bar = new Bar();
var_dump($foo == $bar);  // bool(false)
var_dump($foo != $bar);  // bool(true)
var_dump($foo === $bar); // bool(false)
var_dump($foo !== $bar); // bool(true)

$foo = new Foo();
$bar = $foo;
var_dump($foo == $bar);  // bool(true)
var_dump($foo != $bar);  // bool(false)
var_dump($foo === $bar); // bool(true)
var_dump($foo !== $bar); // bool(false)

results matching ""

    No results matching ""