<?php class lista { protected $datos = array(); public $contador=-1; //adiciona un elemento al array public function add($valor) { $this->datos[]=$valor; $this->contador++; } //elimina un elemento de la lista public function remove($index) { unset($this->datos[$index]); $tmp=array_values($this->datos); $this->datos = $tmp; $this->contador--; } //reemplaza un valor en el array por indice //retorna true si se udo cambiar public function reemplazaXindice($valor, $index) { if($index>$this->contador) return false; $this->datos[$index]=$valor; return true; } //reemplaza un valor en el array basado en un valor actual //va a retornar el indice reemplazado public function reemplazarXvalor($objactual,$valor) { $esta=$this->existe($objactual); if($esta>=0) $this->datos[$esta]=$valor; return $esta; } //retorna el indice de un objeto en la lista public function existe($valor) { $retornar = -1; for($k=0;$k<=$this->contador;$k++) { if($this->compareobjects($this->datos[$k],$valor)) { $retornar = $k; break; } } return $retornar; } //retorna el objeto que se encuentra en la posicion public function getItem($indice) { if($this->contador<$indice) return null; if(!isset($this->datos[$indice])) return null; return $this->datos[$indice]; } //retorna el array de valores public function items() { return $this->datos; } //compara dos objetos public function compareobjects($obj1,$obj2) { $resultado = false; //voy a verificar si sea implementado objetos if(!is_object($obj1)) { if($obj1 == $obj2) return true; else return false; } if(!is_object($obj2)) { if($obj1 == $obj2) return true; else return false; } //creo los objetos basados en ReflectionClass $refObj1 = new ReflectionClass($obj1); $refObj2 = new ReflectionClass($obj2); //voy a comparar si ambos objetos tienen el mismo nombre de clase if($refObj1->getName()==$refObj2->getName() ) { //obtengo las propiedades de cada uno de los objetos $aProp1=$refObj1->getProperties(); $aProp2=$refObj2->getProperties(); //voy a iterar entre todas las propiedades de los objetos //como ya determine que ambos son de la misma clase //ambos tienen la misma cantidad de propiedades for($k=0;$k<sizeof($aProp2);$k++) { //si la propiedad es privada la coloco como accesible if($aProp1[$k]->isPrivate()) { $aProp1[$k]->setAccessible(true); $aProp2[$k]->setAccessible(true); } //si la propiedad es protegida la coloco como accesible if($aProp1[$k]->isProtected()) { $aProp1[$k]->setAccessible(true); $aProp2[$k]->setAccessible(true); } //comparo ambos valores if($aProp1[$k]->getValue($obj1)==$aProp2[$k]->getValue($obj2)) $resultado = true; else { //si una de las propiedades no es igual en ambos objetos //termino el for $resultado=false; break 1; } } } else $resultado = false; return $resultado ; } } ?>
|