对象创建方法混乱


Object creation method confused

我已经阅读了关于这一点的手册,但我无法理解背后的逻辑。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)