我已经阅读了关于这一点的手册,但我无法理解背后的逻辑。http://www.php.net/manual/en/language.oop5.basic.php
$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 === $obj2); //bool(false)
尽管如此,
var_dump($obj1); //object(Test)#1 (0) { }
var_dump($obj2); //object(Test)#2 (0) { }
我期待bool(true),但它是"bool(false)"。
根据手册:-
当使用标识运算符(==)时,对象变量是相同的,当且仅当它们引用同一类的同一实例
同一类有两个独立的实例,因此===
的计算结果为false。
因此,$obj1 === $obj2
评估为false,但$obj1 == $obj2
将评估为true作为
当使用比较运算符(==)时,对象变量以一种简单的方式进行比较,即:如果两个对象实例具有相同的属性和值,并且是同一类的实例,则它们是相等的。
可能是您没有意识到您已经通过执行$obj2 = new $obj1;
创建了一个新的Test实例。将其更改为$obj2 = $obj1;
,您会发现$obj1 === $obj2
的计算结果为true,因为您现在有两个变量引用相同的Test实例。
只有当对象引用同一实例时,它们才是等价的。
$obj1 = new Test();
$obj2 = new Test();
var_dump($obj1 === $obj2); // bool(false)
但是
$obj1 = new Test();
$obj2 = &$obj1;
var_dump($obj1 === $obj2); // bool(true)