Ahora, las implementaciones para la construcción del árbol.
Diba\GenericTree\Node
Código PHP:
Ver original<?php
/**
* @copyright (c) 2013
* @package Diba
* @subpackage GenericTree
*/
namespace Diba\GenericTree;
use Diba\Tree\Node as INode;
use Diba\Tree\NodeList as INodeList;
use InvalidArgumentException;
/**
* Implementación de \Diba\Tree\Node.
*/
class Node implements INode
{
/**
* Colección de nodos hijos.
*
* @var \Diba\Tree\NodeList
*/
protected $children;
/**
* El nodo padre.
*
* @var \Diba\Tree\Node
*/
protected $parent;
/**
* El valor del nodo.
*
* @var mixed
*/
protected $value;
// \Diba\Tree\Node
/**
* Devuelve una colección de los nodos hijos.
*
* @return \Diba\Tree\NodeList
*/
public function getChildren()
{
if (!$this->children instanceof INodeList) {
$this->children = new NodeList();
}
return $this->children;
}
/**
* Devuelve el nodo padre (si existe), o de lo contrario null.
*
* @return \Diba\Tree\Node|null
*/
public function getParent()
{
return $this->parent;
}
/**
* Devuelve el valor del nodo.
*
* @return mixed
*/
public function getValue()
{
return $this->value;
}
/**
* Indica si el nodo contiene hijos.
*
* @return bool
*/
public function hasChildren()
{
$hasChildren = false;
if (isset($this->children)) { if (!$this->children->isEmpty()) {
$hasChildren = true;
}
}
return $hasChildren;
}
/**
* Indica si el nodo contiene padre.
*
* @return bool
*/
public function hasParent()
{
return isset($this->parent); }
// \Diba\GenericTree\Node
/**
* Constructor
*
* @param mixed $value El valor para el nodo.
* @param \Diba\Tree\Node $parent El padre de este nodo.
* @param \Diba\Tree\NodeList $children Los hijos de este nodo.
* @return \Diba\GenericTree\Node
*/
public function __construct(
$value = null,
INode $parent = null,
INodeList $children = null
) {
$this->value = $value;
$this->parent = $parent;
$this->children = $children;
}
/**
* Reestablece el nodo a su estado inicial.
*
* @return void
*/
{
$this->children = null;
$this->parent = null;
$this->value = null;
}
/**
* Establece los hijos de este nodo.
*
* @return void
*/
public function setChildren(INodeList $children)
{
$this->children = $children;
}
/**
* Establece el padre de este nodo.
*
* @return void
* @throws \InvalidArgumentException
* When trying to set a node as its own parent.
*/
public function setParent(INode $node)
{
if ($node === $this) {
throw new InvalidArgumentException(
'Cannot set node as its own parent'
);
}
$this->parent = $node;
}
/**
* Establece el valor de este nodo.
*
* @return void
*/
public function setValue($value)
{
$this->value = $value;
}
}
(Continúa en comentarios)