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 Countable, RecursiveIterator
{
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