Manuel PHP

Table des matières

Préface
I. Au moment de commencer
II. Installation et configuration
III. Référence du langage
IV. Sécurité
V. Caractéristiques
VI. Référence des fonctions
VII. PHP et le moteur interne Zend
VIII. FAQ : foire Aux Questions
IX. Annexes
Remerciements



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 :

Exemple 18-20. 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

Ce qui est le résultat que nous attendions, au vu 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 classe conteneur, qui stocke un tableau associatif Flag.

Exemple 18-21. 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

Travail collaboratif

Contribuez, en ajjoutant des elements a cette page de manuel :

Merci de votre aide
L’equipe Php.fr

 


Index | Afficher le texte source | Anciennes révisions | Derniers changements | Connexion
©2007 Wiki Copyright