4.9 Les classes et les objets (PHP 4)
4 Référence du langage
Manuel PHP
. Les classes : class . extends : héritage . Constructeur . Opérateur de contexte de classe ( :: ) . parent . Sauvegarde d'objets - cas des sessions . Les fonctions magiques __sleep et __wakeup . Références dans un constructeur ->Comparer des objets
|
4.9.9 Comparer des objets
En PHP 4, les objets sont comparés de manière très simple,
à savoir : deux instances sont égales si elles ont les mêmes
attributs et valeurs, et qu'elles sont de la même classe. Des règles
similaires s'appliquent lors de la comparaison avec l'opérateur
===
.
Si vous exécutons le code suivant :
Exemple de comparaison d'objets en PHP 4 |
<?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 SwitchableFlag extends Flag {
function turnOn() { $this->flag = true; }
function turnOff() { $this->flag = false; } }
$o = new Flag(); $p = new Flag(false); $q = new Flag();
$r = new SwitchableFlag();
echo "Compare des instances créées avec les mêmes paramètres\n"; compareObjects($o, $q);
echo "\nCompare des instances créées avec différents paramètres\n"; compareObjects($o, $p);
echo "\nCompare une instance d'un parent avec celle d'une sous-classe\n"; compareObjects($o, $r);
?>
|
Ce qui est le résultat que nous attendions, au vue des règles édictées.
Seules deux instances avec les mêmes valeurs d'attributs, et issues de la même
classe sont considérées comme égales.
Même lorsque nous avons une composition d'objet, la même règle de comparaison
s'applique. Dans l'exemple ci-dessous, nous allons créer une classer
conteneur, qui stocke un tableau associatif
Flag
.
Comparaison d'objets composés en PHP 4 |
<?php
class FlagSet { var $set;
function FlagSet($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 FlagSet(); $u->addFlag('flag1', $o); $u->addFlag('flag2', $p); $v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p)); $w = new FlagSet(array('flag1'=>$q));
echo "\nObjects composés u(o,p) et v(q,p)\n"; compareObjects($u, $v);
echo "\nu(o,p) et w(q)\n"; compareObjects($u, $w);
?>
|
|