Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/04/2011, 13:38
Avatar de Danielfuzz
Danielfuzz
 
Fecha de Ingreso: septiembre-2007
Mensajes: 111
Antigüedad: 16 años, 6 meses
Puntos: 18
Pregunta Respuesta: Problema con definicion de una clase

hola de nuevo masterpuppet, primeramente mil gracias por recomendarme las interfaces pues te comento que ya implementé la interface Countable en mi clase y funciona perfectamente. También estoy tratando de implementar la interface RecursiveIterator, ya he implementado todos su métodos a excepción de uno: el getChildren() que viendo la ayuda de PHP te debe devolver un objeto de la clase RecursiveIterator y no existe ningún ejemplo de cómo se podria hacer uso de esta interface, por favor no sé si podrias darme una mano con este método más.

Definición de la interface RecursiveIterator

Código PHP:
RecursiveIterator extends Iterator {
/* Métodos */
public RecursiveIterator getChildren void )
public 
bool hasChildren void )
/* Métodos heredados */
abstract public mixed Iterator::current void )
abstract public 
scalar Iterator::key void )
abstract public 
void Iterator::next void )
resumenpúblicovoid Iterator::rewind void )
resumen público boolean Iterator::valid void )

Mi clase:
Código PHP:
<?

class Nodo implements CountableRecursiveIterator
{
    public 
$nombre;
    public 
$valor;
    public 
$atributos=array();
    private 
$elementos=array();
    private 
$contador=0;
    private 
$actual=0;
    public 
$padre=null;
    
    function 
__construct($nombre$valor="")
    {
        
$this->nombre=$nombre;
        
$this->valor=$valor;
        
$this->padre=$padre;
    }
    
    public function 
addAtributo($nombre,$valor)
    {
        
$this->atributos[$nombre]=$valor;
    }
    
    public function 
removeAtributo($nombre)
    {
        unset(
$this->atributos[$nombre]);
    }
    
    public function 
addElemento($nodo)
    {
        
$nodo->padre=$this;
        
$this->elementos[$this->contador]=$nodo;
        
$this->contador++;
    }
    
    public function 
elemento($i)
    {
        return 
$this->elementos[$i];
    }
    
    public function 
removeElemento($nodo)
    {
        
$llave=array_search($nodo$this->elementos,true);
        
        echo 
"llave".$llave;
        
        
$this->elementos[$llave]->padre=null;
        
        while(isset(
$this->elementos[$llave+1]))
        {
            
$this->elementos[$llave]=$this->elementos[$llave+1];
            
$llave++;
        }
        unset(
$this->elementos[$llave]);
        
$this->contador--;
    }
    
    
//MEtodos de interfaz
    
    
public function count(){
        return 
count($this->elementos);
    }
    
    public function 
getChildren()
    {
    }
    
    public function 
hasChildren()
    {
        if(
count($this->elementos)>0)
            return 
true;
        else
            return 
false;
    }
    
    public function 
rewind()
    {
        
$this->actual=0;    
    }
    
    public function 
current()
    {
        return 
$this->elementos[$this->actual];
    }
    
    public function 
key(){
        return 
$this->actual;
    }
    
    public function 
next(){
        ++
$this->actual;
    }
    
    public function 
valid(){
        return isset(
$this->elementos[$this->actual]);
    }
}

?>
Mi script de prueba:
Código PHP:
<?
include_once("Nodo.php");
    
    
$nodo = new Nodo("raiz");
    
$nodo->addAtributo("paginas",1);
    
$nodo->addElemento(new Nodo("elemento"));
    
$nodo->elemento(0)->addAtributo("id",1);
    
$nodo->elemento(0)->addElemento(new Nodo("nombre"));
    
$nodo->elemento(0)->elemento(0)->valor="Daniel";
    
    echo 
"nodo raíz tiene ".count($nodo)." elementos";
    
    
$aux=$nodo->elemento(0);
    
    
$nodo->removeElemento($aux);
    
    echo 
"nodo raíz tiene ".count($nodo)." elementos";
?>
Saludos