PHP Порівняння об’єктів

У PHP 5 порівняння об'єктів є більш складним процесом, ніж у PHP 4, а також процесом, що більш відповідає ідеології об'єктно-орієнтованої мови (тут немає на увазі, що PHP 5 є таким).

При використанні оператора порівняння ( == ) властивості об'єктів просто порівнюються один з одним, а саме: два об'єкти рівні, якщо вони містять однакові властивості і однакові їх значення і є екземплярами одного і того ж класу.

З іншого боку, при використанні оператора ідентичності ( === ), властивості об'єкта вважаються ідентичними тоді і тільки тоді, коли вони посилаються на той самий екземпляр одного й того ж класу.

Наступний приклад дасть ясність.

Приклад 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 = новий 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