<?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\Code;
class NameInformation
{
/**
* @var string
*/
protected $namespace = null;
/**
* @var array
*/
protected $uses = array();
/**
* @param string $namespace
* @param array $uses
*/
public function __construct($namespace = null, array $uses = array())
{
if ($namespace) {
$this->setNamespace($namespace);
}
if ($uses) {
$this->setUses($uses);
}
}
/**
* @param string $namespace
* @return NameInformation
*/
public function setNamespace($namespace)
{
$this->namespace = (string) $namespace;
return $this;
}
/**
* @return string
*/
public function getNamespace()
{
return $this->namespace;
}
/**
* @return bool
*/
public function hasNamespace()
{
return ($this->namespace != null);
}
/**
* @param array $uses
* @return NameInformation
*/
public function setUses(array $uses)
{
$this->uses = array();
$this->addUses($uses);
return $this;
}
/**
* @param array $uses
* @return NameInformation
*/
public function addUses(array $uses)
{
foreach ($uses as $use => $as) {
if (is_int($use)) {
$this->addUse($as);
} elseif (is_string($use)) {
$this->addUse($use, $as);
}
}
return $this;
}
/**
* @param array|string $use
* @param string $as
*/
public function addUse($use, $as = null)
{
if (is_array($use) && array_key_exists('use', $use) && array_key_exists('as', $use)) {
$uses = $use;
$use = $uses['use'];
$as = $uses['as'];
}
$use = trim($use, '\\');
if ($as === null) {
$as = trim($use, '\\');
$nsSeparatorPosition = strrpos($as, '\\');
if ($nsSeparatorPosition !== false && $nsSeparatorPosition !== 0 && $nsSeparatorPosition != strlen($as)) {
$as = substr($as, $nsSeparatorPosition + 1);
}
}
$this->uses[$use] = $as;
}
/**
* @return array
*/
public function getUses()
{
return $this->uses;
}
/**
* @param string $name
* @return string
*/
public function resolveName($name)
{
if ($this->namespace && !$this->uses && strlen($name) > 0 && $name{0} != '\\') {
return $this->namespace . '\\' . $name;
}
if (!$this->uses || strlen($name) <= 0 || $name{0} == '\\') {
return ltrim($name, '\\');
}
if ($this->namespace || $this->uses) {
$firstPart = $name;
if (($firstPartEnd = strpos($firstPart, '\\')) !== false) {
$firstPart = substr($firstPart, 0, $firstPartEnd);
} else {
$firstPartEnd = strlen($firstPart);
}
if (($fqns = array_search($firstPart, $this->uses)) !== false) {
return substr_replace($name, $fqns, 0, $firstPartEnd);
}
if ($this->namespace) {
return $this->namespace . '\\' . $name;
}
}
return $name;
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|