создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

Сравнение объектовПред.Глава 19. Классы и объекты (PHP 5)След.

Сравнение объектов

В PHP 5 сравнение объектов является более сложным процессом, чем в PHP4, а также процессом, более соответствующим идеологии объектно-ориентированного языка (здесь не имеется в виду, что PHP 5 является таковым).

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

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

Следующий пример внесёт ясность.

Пример 19-29. Пример сравнения объектов в PHP 5

<?

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 "Два экземпляра 1 и того же класса\n";

compareObjects($o, $p);

echo "\nДве ссылки на 1 и тот же экземпляр\n";

compareObjects($o, $q);

echo "\nЭкземпляры двух разных классов\n";

compareObjects($o, $r);

?>

Результатом выполнения этого кода будет:

Два экземпляра 1 и того же класса

o1 == o2 : TRUE

o1 != o2 : FALSE

o1 === o2 : FALSE

o1 !== o2 : TRUE

Две ссылки на 1 и тот же экземпляр

o1 == o2 : TRUE

o1 != o2 : FALSE

o1 === o2 : TRUE

o1 !== o2 : FALSE

Экземпляры двух разных классов

o1 == o2 : FALSE

o1 != o2 : TRUE

o1 === o2 : FALSE

o1 !== o2 : TRUE

Пред.

Начало

След.

Клонирование объектов

Уровень выше

Reflection

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting