对象创建方法困惑

时间:2013-07-27 06:58:17

标签: php object

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

2 个答案:

答案 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)