<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Server\Reflection;
/**
* Node Tree class for Zend\Server reflection operations
*/
class 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, 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 bool $new Whether or not the child node is newly created
* and should always be attached
* @return void
*/
public function setParent(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 static($value, $this);
return $child;
}
/**
* Attach a child node
*
* @param \Zend\Server\Reflection\Node $node
* @return void
*/
public function attachChild(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 bool
*/
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;
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|