Comparación de Objetos

A partir de  PHP 5, la comparación de objetos es más complicada que en PHP 4 y más de acuerdo con lo que uno esperaría de un lenguaje orientado a objetos (no es que PHP no sea uno de tales lenguajes).

Cuando se usa el operador de comparación (==), las variables del objeto son comparadas de una forma simple, digase: Dos instancias de objetos son iguales si tienes los mismos atributos y valores, y son instancias de la misma clase.

Por otro lado, cuando se usa el operador identico (===), las variables del objeto son identicas solo si refieren a la misma instancia de la misma clase.

Un ejemplo clarificará estas reglas.

Ejemplo 19-31. Ejemplo de comparación de objetos en PHP 5
<?phpfunction 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 
"Two instances of the same class\n";compareObjects($o$p);

echo 
"\nTwo references to the same instance\n";compareObjects($o$q);

echo 
"\nInstances of two different classes\n";compareObjects($o$r);?>

El resultado del ejemplo seria:
Two instances of the same class
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE

Two references to the same instance
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE

Instances of two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE

No response to “Comparación de Objetos”