Manuel PHP
Précédent | Chapitre 13. Les classes et les objets | Suivant

# Comparer des objets en `PHP` 5

Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utilisez ce module à vos risques et périls.

En `PHP` 5, la comparaison d'objets et plus compliquée qu'en `PHP` 4, afin d'être plus proche du comportement des langages orienté objet (bien que `PHP` n'en soit pas un).

Lors de l'utilisation de l'opérateur de comparaison `==`, les objets sont comparées de manière simple, à savoir : deux objets sont égaux si ils ont les mêmes attributs et valeurs, et qu'ils sont des instances de la même classe.

D'un autre coté, lors de l'utilisation de l'opérateur d'identité (`===`), les objets sont identiques uniquement si ils font référence au même objet de la même classe.

Un exemple va illustrer ces règles.

Exemple 13-20. Exemple de comparaison d'objets en `PHP` 5

`<?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 OtherFlag {
var $flag;
function OtherFlag($flag=true) {
$this->flag = $flag;
}
}
$o = new Flag();
$p = new Flag();
$q = $o;
$r = new OtherFlag();
echo "Deux instances de la même classe\n";
compareObjects($o, $p);
echo "\nDeux références sur le même objet\n";
compareObjects($o, $q);
echo "\nInstances de classes différentes\n";
compareObjects($o, $r);
?>`

Cet exemple va afficher :

    Deux instances de la même classe
    o1 == o2 : TRUE
    o1 != o2 : FALSE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

    Deux références sur le même objet
    o1 == o2 : TRUE
    o1 != o2 : FALSE
    o1 === o2 : TRUE
    o1 !== o2 : FALSE

    Instances de classes différentes
    o1 == o2 : FALSE
    o1 != o2 : TRUE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

Précédent | Sommaire | Suivant
Comparer des objets en `PHP` 4 | Niveau supérieur | Les références