energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file TreeNode.class.php

Documentation is available at TreeNode.class.php

  1. <?php
  2.  
  3. /**
  4.  * Содержит класс TreeNode
  5.  *
  6.  * @package energine
  7.  * @subpackage core
  8.  * @author dr.Pavka
  9.  * @copyright Energine 2007
  10.  * @version $Id$
  11.  */
  12.  
  13.  
  14. /**
  15.  * Класс реализующий работу с узлом дерева
  16.  *
  17.  * @package energine
  18.  * @subpackage core
  19.  * @author dr.Pavka
  20.  * @final
  21.  */
  22. final class TreeNode implements IteratorAggregate{
  23.     /**
  24.      * Идентификатор узла
  25.      *
  26.      * @var int 
  27.      * @access private
  28.      */
  29.     private $id;
  30.     /**
  31.      * Идентификатор родительского узла
  32.      *
  33.      * @var TreeNode 
  34.      * @access private
  35.      */
  36.     private $parent = null;
  37.     /**
  38.      * Массив дочерних узлов
  39.      *
  40.      * @var TreeNodeList 
  41.      * @access private
  42.      */
  43.     private $children;
  44.  
  45.     /**
  46.      * Конструктор класса
  47.      *
  48.      * @return void 
  49.      */
  50.     public function __construct($id{
  51.         $this->children = new TreeNodeList();
  52.         $this->id = $id;
  53.     }
  54.  
  55.     /**
  56.      * Возвращает идентификатор узла
  57.      *
  58.      * @return int 
  59.      * @access public
  60.      */
  61.  
  62.     public function getID({
  63.         return $this->id;
  64.     }
  65.  
  66.     /**
  67.      * Возвращает родительский узел
  68.      *
  69.      * @return TreeNode 
  70.      * @access public
  71.      */
  72.  
  73.     public function getParent({
  74.         return $this->parent;
  75.     }
  76.  
  77.     /**
  78.      * Возвращает флаг указывающий на наличие детей
  79.      *
  80.      * @return bool 
  81.      * @access public
  82.      */
  83.  
  84.     public function hasChildren({
  85.         return (bool)$this->children->getLength();
  86.     }
  87.  
  88.     /**
  89.      * Возвращает массив потомков
  90.      *
  91.      * @return TreeNodeList 
  92.      * @access public
  93.      */
  94.  
  95.     public function getChildren({
  96.         return $this->children;
  97.     }
  98.     /**
  99.      * Возвращает итератор объекта
  100.      *
  101.      * @see IteratorAggregate
  102.      * @return TreeNodeList 
  103.      * @access public
  104.      */
  105.     public function getIterator({
  106.         return $this->getChildren();
  107.     }
  108.  
  109.     /**
  110.      * Добавление узла как дочернего
  111.      *
  112.      * @param TreeNode 
  113.      * @return TreeNode 
  114.      * @access public
  115.      */
  116.  
  117.     public function addChild(TreeNode $node{
  118.         $node $this->children->add($node);
  119.         $node->parent $this;
  120.  
  121.         return $node;
  122.     }
  123.  
  124.     /**
  125.      * Удаление узла из списка дочерних узлов
  126.      *
  127.      * @param TreeNode 
  128.      * @return TreeNode 
  129.      * @access public
  130.      */
  131.  
  132.     public function removeChild($node{
  133.         $this->children->remove($node)->parent null;
  134.         return $node;
  135.     }
  136.  
  137.     /**
  138.      * Возвращает всех родителей узла
  139.      *
  140.      * @return TreeNodeList 
  141.      * @access public
  142.      */
  143.  
  144.     public function getParents({
  145.         $result new TreeNodeList();
  146.         $node $this;
  147.         while (!is_null($node)) {
  148.             if (!is_null($node $node->getParent())) {
  149.                 $result->add($node);
  150.             }
  151.         }
  152.         return $result;
  153.     }
  154.  
  155.     /**
  156.      * Возвращает всех потомков
  157.      *
  158.      * @return TreeNodeList 
  159.      * @access public
  160.      */
  161.  
  162.     public function getDescendants({
  163.         $result $this->iterateDescendants($this->getChildren());
  164.         return $result;
  165.     }
  166.  
  167.     /**
  168.      * Внутренний метод возвращаения потомков
  169.      *
  170.      * @return TreeNodeList 
  171.      * @access private
  172.      */
  173.  
  174.     private function iterateDescendants(TreeNodeList $nodeList{
  175.         $result new TreeNodeList();
  176.         foreach ($nodeList as $node{
  177.             $result->add($node);
  178.             $result->merge($node->iterateDescendants($node->getChildren()));
  179.         }
  180.         return $result;
  181.     }
  182.  
  183.     /**
  184.      * Возвращает объект в виде массива
  185.      *
  186.      * @param bool рекурсия
  187.      * @return array 
  188.      * @access public
  189.      */
  190.  
  191.     public function asList($isRecursive true{
  192.         $result[$this->getID()(!is_null($this->getParent()))?$this->getParent()->getID():null;
  193.         if ($this->hasChildren(&& $isRecursive{
  194.             $result += $this->getChildren()->asList();
  195.         }
  196.         return $result;
  197.     }
  198. }
В создании документации нам помог: phpDocumentor