我已经阅读了这一点的手册,但我无法理解这背后的逻辑。 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)”。
答案 0 :(得分:2)
根据manual: -
当使用标识运算符(===)时,当且仅当它们引用同一类的同一实例时,对象变量才相同
您有两个相同类的单独的实例,因此===
的计算结果为false。
因此,$obj1 === $obj2
评估为false,但$obj1 == $obj2
评估为true
使用比较运算符(==)时,会以简单的方式比较对象变量,即:如果两个对象实例具有相同的属性和值,则它们是相同的,并且是同一类的实例。
您可能不知道通过$obj2 = new $obj1;
创建了一个新的Test实例。将其更改为$obj2 = $obj1;
,您会发现$obj1 === $obj2
的计算结果为true,因为您现在有两个变量引用同一个Test实例。
答案 1 :(得分:2)
如果对象引用相同的实例,则它们只是等同的。
$obj1 = new Test();
$obj2 = new Test();
var_dump($obj1 === $obj2); // bool(false)
但是
$obj1 = new Test();
$obj2 = &$obj1;
var_dump($obj1 === $obj2); // bool(true)