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