En 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-30. Ejemplo de comparación de objetos en PHP 5
<?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 "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 |
|