En PHP 4, los objetos son comparados en una forma muy simple: Dos
instancias de objeto son iguales si tienen los mismos atributos y
valores, y son instancias de la misma clase. Reglas similares se
aplican cuando se comparan dos objetos usando el operador de
identidad (===).
Si ejecut谩ramos el c贸digo del siguiente ejemplo:
Ejemplo 18-1. Ejemplo de comparaci贸n de objetos en PHP 4
<?php function bool_a_cadena($bool) { if ($bool === false) { return 'FALSE'; } else { return 'TRUE'; } }
function compararObjetos(&$o1, &$o2) { echo 'o1 == o2 : '.bool_a_cadena($o1 == $o2)."\n"; echo 'o1 != o2 : '.bool_a_cadena($o1 != $o2)."\n"; echo 'o1 === o2 : '.bool_a_cadena($o1 === $o2)."\n"; echo 'o1 !== o2 : '.bool_a_cadena($o1 !== $o2)."\n"; }
class Bandera { var $bandera;
function Bandera($bandera=true) { $this->bandera = $bandera; } }
class BanderaCambiante extends Bandera {
function encender() { $this->bandera = true; }
function apagar() { $this->bandera = false; } }
$o = new Bandera(); $p = new Bandera(false); $q = new Bandera();
$r = new BanderaCambiante();
echo "Comparar instancias creadas con los mismos parámetros\n"; compararObjetos($o, $q);
echo "\nComparar instancias creadas con parámetros diferentes\n"; compararObjetos($o, $p);
echo "\nComparar una instancia de una clase padre con una de una subclase\n"; compararObjetos($o, $r); ?>
|
El resultado del ejemplo seria: Comparar instancias creadas con los mismos parámetros
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Comparar instancias creadas con parámetros diferentes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Comparar una instancia de una clase padre con una de una subclase
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE |
|
Que es la salida que podemos esperar dadas las reglas de
comparaci贸n descritas anteriormente. Solo las instancias con
los mismos valores para sus atributos y de la misma clase son
consideradas iguales e id茅nticas.
Incluso en los casos en donde tenemos composici贸n de
objetos, se aplican las mismas reglas de comparaci贸n. En el
ejemplo siguiente creamos una clase contenedora que almacena una
matriz asociativa de objetos Bandera.
Ejemplo 18-2. Comparaci贸n de objetos compuestos en PHP 4
<?php class ConjuntoBanderas { var $conjunto;
function ConjuntoBanderas($matrizBanderas = array()) { $this->conjunto = $matrizBanderas; }
function agregarBandera($nombre, $bandera) { $this->conjunto[$nombre] = $bandera; }
function eliminarBandera($nombre) { if (array_key_exists($nombre, $this->conjunto)) { unset($this->conjunto[$nombre]); } } }
$u = new ConjuntoBanderas(); $u->agregarBandera('bandera1', $o); $u->agregarBandera('bandera2', $p); $v = new ConjuntoBanderas(array('bandera1'=>$q, 'bandera2'=>$p)); $w = new ConjuntoBanderas(array('bandera1'=>$q));
echo "\nObjetos compuestos u(o,p) y v(q,p)\n"; compararObjetos($u, $v);
echo "\nu(o,p) y w(q)\n"; compararObjetos($u, $w); ?>
|
El resultado del ejemplo seria: Objetos compuestos u(o,p) y v(q,p)
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
u(o,p) y w(q)
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE |
|