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 ' |