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 :

  • soit les objets possèdent une même référence,
  • soit les objets sont des instances d'une même classe et que leurs états sont identiques.

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 '
'; } comparerReferences($n1, $n2); comparerReferences($n1, $n3); comparerReferences($n1, $n4); comparerReferences($n2, $n3); comparerReferences($n2, $n4); comparerReferences($n3, $n4); function comparerReferences($obj1, $obj2){ echo $obj1; echo '[' . $obj1 . '] == '; echo $obj2; echo '[' . $obj2 . '] : '; if($obj1 === $obj2){ echo 'Les objets ont une même référence.'; } else { echo 'Les objets ont des références différentes.'; } echo '
'; } $n5 = $n1; $n5->setValeur(2); comparer($n1, $n5); comparer($n2, $n5); comparer($n3, $n5); comparer($n4, $n5); comparerReferences($n1, $n5); comparerReferences($n2, $n5); comparerReferences($n3, $n5); comparerReferences($n4, $n5); ?> </body> </html>