4.9 Les classes et les objets
4 Référence
Manuel PHP
. Les classes : class . extends : héritage . Constructor : constructeur . Opérateur :: . parent . Sauvegarde d'objets - cas des sessions . Les fonctions magiques __sleep et __wakeup . Références dans un constructeur . Comparer des objets en PHP 4 ->Comparer des objets en PHP 4
|
4.9.10 Comparer des objets en PHP 4
Attention |
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
5,
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, dans le même espace de nom.
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, dans le
même espace de nom.
Un exemple va illustrer ces règles.
Exemple de comparaison d'objets en PHP 5 |
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; } }
namespace Other {
class Flag { var $flag;
function Flag($flag=true) { $this->flag = $flag; } }
}
$o = new Flag(); $p = new Flag(); $q = $o; $r = new Other::Flag();
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 de même nom, mais dans des espaces de noms différents\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 de même nom, mais dans des espaces de noms différents
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
|