-3

この点のマニュアルを読みましたが、この背後にあるロジックを理解できません。 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)」です。

4

2 に答える 2

2

マニュアルによると: -

同一性演算子 (===) を使用する場合、オブジェクト変数は、同じクラスの同じインスタンスを参照する場合にのみ同一です。

同じクラスの2 つの別個===のインスタンスがあるため、false と評価されます。

したがって、$obj1 === $obj2false と評価されますが、$obj1 == $obj2次のように true と評価されます。

比較演算子 (==) を使用すると、オブジェクト変数は単純な方法で比較されます。つまり、2 つのオブジェクト インスタンスは、同じ属性と値を持ち、同じクラスのインスタンスである場合に等しくなります。

を実行して Test の新しいインスタンスを作成したことに気付いていない可能性があります$obj2 = new $obj1;。これを に変更すると、Test の同じインスタンスを参照する 2 つの変数があるため、true と評価される$obj2 = $obj1;ことがわかります。$obj1 === $obj2

于 2013-07-27T07:04:16.947 に答える
2

オブジェクトは、同じインスタンスを参照する場合にのみ同等です。

$obj1 = new Test();
$obj2 = new Test();
var_dump($obj1 === $obj2); // bool(false)

しかし

$obj1 = new Test();
$obj2 = &$obj1;
var_dump($obj1 === $obj2);  // bool(true)
于 2013-07-27T07:05:34.720 に答える