В PHP 5 сравнение объектов является более сложным процессом, чем
в PHP 4, а также процессом, более соответствующим идеологии
объектно-ориентированного языка (здесь не имеется в виду,
что PHP 5 является таковым).
При использовании оператора сравнения (==),
свойства объектов просто сравниваются друг с другом, а именно: два
объекта равны, если они содержат одинаковые свойства и одинаковые
их значения и являются экземплярами одного и того же класса.
С другой стороны, при использовании оператора идентичности (===),
свойства объекта считаются идентичными тогда и только тогда, когда
они ссылаются на один и тот же экземпляр одного и того же класса.
Следующий пример внесёт ясность.
Пример 19-31. Пример сравнения объектов в PHP 5
<?php function bool2str($bool) { if ($bool === false) { return 'FALSE'; } else { return 'TRUE'; } }
function compareObjects(&$o1, &$o2) { echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n"; echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n"; echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n"; echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n"; }
class Flag { var $flag;
function Flag($flag=true) { $this->flag = $flag; } }
class OtherFlag { var $flag;
function OtherFlag($flag=true) { $this->flag = $flag; } }
$o = new Flag(); $p = new Flag(); $q = $o; $r = new OtherFlag();
echo "Два экземпляра одного и того же класса\n"; compareObjects($o, $p);
echo "\nДве ссылки на один и тот же экземпляр\n"; compareObjects($o, $q);
echo "\nЭкземпляры двух разных классов\n"; compareObjects($o, $r); ?>
|
|
Результатом выполнения этого кода будет:
Два экземпляра одного и того же класса
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Две ссылки на один и тот же экземпляр
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Экземпляры двух разных классов
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE |