Manuel PHP
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écutez le code suivant :
Example#1 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);
- ?>
L'exemple ci-dessus va afficher :
Compare des instances créées avec les mêmes paramètres
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Compare des instances créées avec différents paramètres
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Compare une instance d'un parent avec celle d'une sous-classe
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
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 classe conteneur, qui stocke un tableau associatif Flag.
Example#2 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);
- ?>
L'exemple ci-dessus va afficher :
Objects composés u(o,p) et v(q,p)
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
u(o,p) et w(q)
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Remonter 
