<?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 ;
}
}
?>
|