123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <?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 2504 2011-12-28 07:35:29Z liu21st $
- * @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;
- }
- }
|