La comparaison d'objets permet de vérifier si un objet est égal à un autre.
Il peut y avoir deux types d'égalité d'objets :
L'opérateur === indique si deux objets ont des références égales.
$obj1 = new UnObjet(); $obj2 = $obj1; $obj3 = new UnObjet(); comparer($obj1, $obj2); //même référence comparer($obj2, $obj3); //références différentes comparer($obj1, $obj3); //références différentes function comparer($obj1, $obj2){ if($obj1 === $obj2) echo 'Les objets possèdent une même référence.'; else echo 'Les objets ont des références différentes.'; }
L'opérateur == indique si les deux objets comparés proviennent d'une instanciation de la même classe et si les attributs et leur valeur sont identiques.
$obj1 = new UnObjet('0'); $obj2 = new UnObjet('1'); $obj3 = new UnObjet('0'); comparer($obj1, $obj2); //objets différents comparer($obj2, $obj3); //objets différents comparer($obj1, $obj3); //objets identiques function comparer($obj1, $obj2){ if($obj1 == $obj2) echo 'Les objets sont identiques.'; else echo 'Les objets sont différents.'; }
Un objet ayant la même référence qu'un autre et ayant le même état, alors ces objets seront identiques dans les deux type de comparaisons.
Les opérateurs !== et != effectuent l'opération de comparaison inverse à ceux précités, en l'occurrence === et ==.
Exemple [voir]<html> <body> <?php class Nombre { private $ombre; public function Nombre($valeur){ $this->nombre = $valeur; } public function getValeur(){ return $this->nombre; } public function setValeur($valeur){ $this->nombre = $valeur; } public function __toString(){ return '[' . $this->nombre . ']'; } } $n1 = new Nombre(1); $n2 = $n1; $n3 = new Nombre(0); $n4 = new Nombre(1); comparer($n1, $n2); comparer($n1, $n3); comparer($n1, $n4); comparer($n2, $n3); comparer($n2, $n4); comparer($n3, $n4); function comparer($obj1, $obj2){ echo $obj1; echo '[' . $obj1 . '] == '; echo $obj2; echo '[' . $obj2 . '] : '; if($obj1 == $obj2) echo 'Les objets sont identiques.'; else echo 'Les objets sont différents.'; echo ' |