Références dans un constructeur
<<<
Comparer des objets Référence du langage
>>>

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);

?>

<< Comparer des objets >>
Références dans un constructeur Les classes et les objets (PHP 4) Référence du langage