5.10 Les classes et les objets (PHP 5)
5 Référence du langage
Manuel PHP
. Introduction . Syntaxe de base . Auto-chargement de classes . Constructeurs et destructeurs . Visibilité . L'opérateur de résolution de portée (::) . Statique . Constantes de classe . Abstraction de classes . Interfaces . Surcharge . Parcours d'objets . Masques . Méthodes magiques . Mot clé "final" . Clonage d'objets ->Comparaison d'objets . Réflexion . Typage objet
|
5.10.17 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.
| 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); ?>
|
|