Clônage d'objets
Typage objet
Les classes et les objets
PHP Manual

## Comparaison d'objets

En PHP 5, la comparaison d'objets est plus complexe qu'en PHP 4, et plus proche du comportement que l'on pourrait attendre d'un langage orienté objet (sans aller jusqu'à dire que PHP 5 en soit un).

Lors de l'utilisation de l'opérateur de comparaison (==), les objets sont comparés 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 #1 Exemple de comparaison d'objets en PHP

`<?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);
?>`

L'exemple ci-dessus 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 différentes
    o1 == o2 : FALSE
    o1 != o2 : TRUE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

> Note:

> Les extensions peuvent définir leurs propres règles pour leurs comparaisons d'objets (==).

Clônage d'objets
Typage objet
Les classes et les objets
PHP Manual