Manuel PHP
Comparaison d'objets
En PHP 5, la comparaison d'objets est plus compliquée qu'en PHP 4 afin d'être plus proche du comportement des langages orientés 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 s'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 s'ils font référence à la même instance de la même classe.
Un exemple va illustrer ces règles.
Example#1 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
- {
- public $flag;
- function Flag($flag = true) {
- $this->flag = $flag;
- }
- }
- class OtherFlag
- {
- public $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);
- ?>
L'exemple ci-dessus 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
Remonter 
