Viewing file: Node.php (4.66 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Server * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */
/** * Node Tree class for Zend_Server reflection operations * * @category Zend * @package Zend_Server * @subpackage Reflection * @version $Id: Node.php 16210 2009-06-21 19:22:17Z thomas $ * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Server_Reflection_Node { /** * Node value * @var mixed */ protected $_value = null;
/** * Array of child nodes (if any) * @var array */ protected $_children = array();
/** * Parent node (if any) * @var Zend_Server_Reflection_Node */ protected $_parent = null;
/** * Constructor * * @param mixed $value * @param Zend_Server_Reflection_Node $parent Optional * @return Zend_Server_Reflection_Node */ public function __construct($value, Zend_Server_Reflection_Node $parent = null) { $this->_value = $value; if (null !== $parent) { $this->setParent($parent, true); }
return $this; }
/** * Set parent node * * @param Zend_Server_Reflection_Node $node * @param boolean $new Whether or not the child node is newly created * and should always be attached * @return void */ public function setParent(Zend_Server_Reflection_Node $node, $new = false) { $this->_parent = $node;
if ($new) { $node->attachChild($this); return; } }
/** * Create and attach a new child node * * @param mixed $value * @access public * @return Zend_Server_Reflection_Node New child node */ public function createChild($value) { $child = new self($value, $this);
return $child; }
/** * Attach a child node * * @param Zend_Server_Reflection_Node $node * @return void */ public function attachChild(Zend_Server_Reflection_Node $node) { $this->_children[] = $node;
if ($node->getParent() !== $this) { $node->setParent($this); } }
/** * Return an array of all child nodes * * @return array */ public function getChildren() { return $this->_children; }
/** * Does this node have children? * * @return boolean */ public function hasChildren() { return count($this->_children) > 0; }
/** * Return the parent node * * @return null|Zend_Server_Reflection_Node */ public function getParent() { return $this->_parent; }
/** * Return the node's current value * * @return mixed */ public function getValue() { return $this->_value; }
/** * Set the node value * * @param mixed $value * @return void */ public function setValue($value) { $this->_value = $value; }
/** * Retrieve the bottommost nodes of this node's tree * * Retrieves the bottommost nodes of the tree by recursively calling * getEndPoints() on all children. If a child is null, it returns the parent * as an end point. * * @return array */ public function getEndPoints() { $endPoints = array(); if (!$this->hasChildren()) { return $endPoints; }
foreach ($this->_children as $child) { $value = $child->getValue();
if (null === $value) { $endPoints[] = $this; } elseif ((null !== $value) && $child->hasChildren()) { $childEndPoints = $child->getEndPoints(); if (!empty($childEndPoints)) { $endPoints = array_merge($endPoints, $childEndPoints); } } elseif ((null !== $value) && !$child->hasChildren()) { $endPoints[] = $child; } }
return $endPoints; } }
|