2013-07-27 7 views
-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 (истина), но это "BOOL (ложь)".

ответ

2

Согласно manual: -

при использовании оператора идентичности (===), предметные переменные идентичны тогда и только тогда, когда они относятся к одному экземпляру того же класса

У вас есть два отдельных экземпляров того же класса, поэтому === оценивает false.

Таким образом, $obj1 === $obj2 оценивается как ложное, но $obj1 == $obj2 бы оценить, верно, как

При использовании оператора сравнения (==), предметные переменные сравниваются простым способом, а именно: два объекта равны если они имеют одинаковые атрибуты и значения и являются экземплярами одного и того же класса.

Возможно, вы не знаете, что создали новый экземпляр теста, выполнив $obj2 = new $obj1;. Измените это на $obj2 = $obj1;, и вы обнаружите, что $obj1 === $obj2 оценивает true, поскольку теперь у вас есть две переменные, относящиеся к одному экземпляру Test.

+0

Спасибо как для объяснения мне ответ, а не б *** г вниз голосования на мой вопрос. :) – Namal

+1

@Priyanga Нет проблем. Но это все объясняется четко в руководстве, поэтому я полагаю, что это причина низких голосов. Не потейте, это происходит. – vascowhite

+0

получил это спасибо .. – Namal

2

Объекты являются только эквивалентными, если они относятся к одному экземпляру.

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

Но

$obj1 = new Test(); 
$obj2 = &$obj1; 
var_dump($obj1 === $obj2); // bool(true) 
Смежные вопросы