Clases y Objetos
PHP Manual

Comparación de Objetos

En PHP 5, la comparación de objetos es más complicada que en PHP 4, y en mayor concordancia con lo que cabe esperar de un Lenguaje Orientado a Objetos (tenga en cuenta que PHP lo es).

Al utilizar el operador de comparación (==), se comparan de una forma sencilla las variables de cada objeto, es decir: Dos instancias de un objeto son iguales si tienen los mismos atributos y valores, y son instancias de la misma clase.

Por otra parte, cuando se utiliza el operador identidad (===), las variables de un objeto son idénticas sí y sólo sí hacen referencia a la misma instancia de la misma clase.

Un ejemplo aclarará estas reglas.

Ejemplo #1 Ejemplo de comparación de objetos en PHP 5

<?php
function bool2str($bool)
{
    if (
$bool === false) {
        return 
'FALSO';
    } else {
        return 
'VERDADERO';
    }
}

function 
compararObjetos(&$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 
Bandera
{
    public 
$bandera;

    function 
Bandera($bandera true) {
        
$this->bandera $bandera;
    }
}

class 
OtraBandera
{
    public 
$bandera;

    function 
OtraBandera($bandera true) {
        
$this->bandera $bandera;
    }
}

$o = new Bandera();
$p = new Bandera();
$q $o;
$r = new OtraBandera();

echo 
"Dos instancias de la misma clase\n";
compararObjetos($o$p);

echo 
"\nDos referencias a la misma instancia\n";
compararObjetos($o$q);

echo 
"\nInstancias de dos clases diferentes\n";
compararObjetos($o$r);
?>

El resultado del ejemplo sería:

Dos instancias de la misma clase
o1 == o2 : VERDADERO
o1 != o2 : FALSO
o1 === o2 : FALSO
o1 !== o2 : VERDADERO

Dos referencias a la misma instancia
o1 == o2 : VERDADERO
o1 != o2 : FALSO
o1 === o2 : VERDADERO
o1 !== o2 : FALSO

Instancias de dos clases diferentes
o1 == o2 : FALSO
o1 != o2 : VERDADERO
o1 === o2 : FALSO
o1 !== o2 : VERDADERO

Nota:

Las extensiones pueden definir sus propias reglas para la comparación de sus objetos.


Clases y Objetos
PHP Manual