<?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\Scanner;
use Zend\Code\NameInformation;
class ParameterScanner
{
/**
* @var bool
*/
protected $isScanned = false;
/**
* @var null|ClassScanner
*/
protected $declaringScannerClass = null;
/**
* @var null|string
*/
protected $declaringClass = null;
/**
* @var null|MethodScanner
*/
protected $declaringScannerFunction = null;
/**
* @var null|string
*/
protected $declaringFunction = null;
/**
* @var null|string
*/
protected $defaultValue = null;
/**
* @var null|string
*/
protected $class = null;
/**
* @var null|string
*/
protected $name = null;
/**
* @var null|int
*/
protected $position = null;
/**
* @var bool
*/
protected $isArray = false;
/**
* @var bool
*/
protected $isDefaultValueAvailable = false;
/**
* @var bool
*/
protected $isOptional = false;
/**
* @var bool
*/
protected $isPassedByReference = false;
/**
* @var array|null
*/
protected $tokens = null;
/**
* @var null|NameInformation
*/
protected $nameInformation = null;
/**
* @param array $parameterTokens
* @param NameInformation $nameInformation
*/
public function __construct(array $parameterTokens, NameInformation $nameInformation = null)
{
$this->tokens = $parameterTokens;
$this->nameInformation = $nameInformation;
}
/**
* Set declaring class
*
* @param string $class
* @return void
*/
public function setDeclaringClass($class)
{
$this->declaringClass = (string) $class;
}
/**
* Set declaring scanner class
*
* @param ClassScanner $scannerClass
* @return void
*/
public function setDeclaringScannerClass(ClassScanner $scannerClass)
{
$this->declaringScannerClass = $scannerClass;
}
/**
* Set declaring function
*
* @param string $function
* @return void
*/
public function setDeclaringFunction($function)
{
$this->declaringFunction = $function;
}
/**
* Set declaring scanner function
*
* @param MethodScanner $scannerFunction
* @return void
*/
public function setDeclaringScannerFunction(MethodScanner $scannerFunction)
{
$this->declaringScannerFunction = $scannerFunction;
}
/**
* Set position
*
* @param int $position
* @return void
*/
public function setPosition($position)
{
$this->position = $position;
}
/**
* Scan
*
* @return void
*/
protected function scan()
{
if ($this->isScanned) {
return;
}
$tokens = &$this->tokens;
reset($tokens);
SCANNER_TOP:
$token = current($tokens);
if (is_string($token)) {
// check pass by ref
if ($token === '&') {
$this->isPassedByReference = true;
goto SCANNER_CONTINUE;
}
if ($token === '=') {
$this->isOptional = true;
$this->isDefaultValueAvailable = true;
goto SCANNER_CONTINUE;
}
} else {
if ($this->name === null && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR)) {
$this->class .= $token[1];
goto SCANNER_CONTINUE;
}
if ($token[0] === T_VARIABLE) {
$this->name = ltrim($token[1], '$');
goto SCANNER_CONTINUE;
}
}
if ($this->name !== null) {
$this->defaultValue .= trim((is_string($token)) ? $token : $token[1]);
}
SCANNER_CONTINUE:
if (next($this->tokens) === false) {
goto SCANNER_END;
}
goto SCANNER_TOP;
SCANNER_END:
if ($this->class && $this->nameInformation) {
$this->class = $this->nameInformation->resolveName($this->class);
}
$this->isScanned = true;
}
/**
* Get declaring scanner class
*
* @return ClassScanner
*/
public function getDeclaringScannerClass()
{
return $this->declaringScannerClass;
}
/**
* Get declaring class
*
* @return string
*/
public function getDeclaringClass()
{
return $this->declaringClass;
}
/**
* Get declaring scanner function
*
* @return MethodScanner
*/
public function getDeclaringScannerFunction()
{
return $this->declaringScannerFunction;
}
/**
* Get declaring function
*
* @return string
*/
public function getDeclaringFunction()
{
return $this->declaringFunction;
}
/**
* Get default value
*
* @return string
*/
public function getDefaultValue()
{
$this->scan();
return $this->defaultValue;
}
/**
* Get class
*
* @return string
*/
public function getClass()
{
$this->scan();
return $this->class;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
$this->scan();
return $this->name;
}
/**
* Get position
*
* @return int
*/
public function getPosition()
{
$this->scan();
return $this->position;
}
/**
* Check if is array
*
* @return bool
*/
public function isArray()
{
$this->scan();
return $this->isArray;
}
/**
* Check if default value is available
*
* @return bool
*/
public function isDefaultValueAvailable()
{
$this->scan();
return $this->isDefaultValueAvailable;
}
/**
* Check if is optional
*
* @return bool
*/
public function isOptional()
{
$this->scan();
return $this->isOptional;
}
/**
* Check if is passed by reference
*
* @return bool
*/
public function isPassedByReference()
{
$this->scan();
return $this->isPassedByReference;
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|