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 |