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”
Publicar un comentario