W PHP 4 obiekty są porównywane w bardzo prosty sposób, to znaczy dwie
instancje obiektów są uważane za równe, jeśli posiadają te same atrybuty i
ich wartości, a także są instancjami tej samej klasy. Podobne reguły są
stosowane, jeśli dwa obiekty są porównywane za pomocą operatora
identyczności (===).
Przykład 18-1. Przykład porównania obiektów w PHP 4
<?php function bool2str($bool) { if ($bool === false) { return 'FALSE'; } else { return 'TRUE'; } }
function porownajObiekty(&$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 Flaga { var $flag;
function Flaga($flag=true) { $this->flag = $flag; } }
class przelaczalanaFlaga extends Flaga {
function turnOn() { $this->flag = true; }
function turnOff() { $this->flag = false; } }
$o = new Flaga(); $p = new Flaga(false); $q = new Flaga();
$r = new przelaczalnaFlaga();
echo "Porównaj instancje stworzone z tymi samymi argumentami\n"; porownajObiekty($o, $q);
echo "\nPorównaj instancje stworzone z różnymi argumentami\n"; porownajObiekty($o, $p);
echo "\nPorównaj instancję klasy nadrzędnej z instancją klasy podrzędnej\n"; porownajObiekty($o, $r); ?>
|
Powyższy przykład wyświetli: Porównaj instancje stworzone z tymi samymi argumentami
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Porównaj instancje stworzone z różnymi argumentami
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Porównaj instancję klasy nadrzędnej z instancją klasy podrzędnej
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE |
|
Wynik działania powyższego skryptu jest całkowicie przewidywalny na
podstawie przedstawionych wyżej reguł. Tylko instancje o tych samych
wartościach tych samych atrybutów, pochodzące z tej samej klasy, są
uznawane za równe i identyczne.
Nawet w przypadku kompozycji obiektów stosowane są te same reguły
porównywania. W poniższym przykładzie stworzona została klasa-pojemnik,
która zawiera tablicę asocjacyjną obiektów klasy
Flaga.
Przykład 18-2. Porównywanie obiektów złożonych w PHP 4
<?php class ZbiorFlag { var $set;
function ZbiorFlag($flagArr = array()) { $this->set = $flagArr; }
function addFlag($name, $flag) { $this->set[$name] = $flag; }
function removeFlag($name) { if (array_key_exists($name, $this->set)) { unset($this->set[$name]); } } }
$u = new ZbiorFlag(); $u->addFlag('flag1', $o); $u->addFlag('flag2', $p); $v = new ZbiorFlag(array('flag1'=>$q, 'flag2'=>$p)); $w = new ZbiorFlag(array('flag1'=>$q));
echo "\nObiekty złożone u(o,p) i v(q,p)\n"; porownajObiekty($u, $v);
echo "\nu(o,p) i w(q)\n"; porownajObiekty($u, $w); ?>
|
Powyższy przykład wyświetli: Obiekty złożone u(o,p) i v(q,p)
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
u(o,p) i w(q)
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE |
|