.=< { Star Gans Tq } >=.

  • Home

  • Killme
  • Download
  • Current Path : /home/m/e/h/meharicl/www/phpBB3/vendor/zendframework/zend-code/src/Scanner/
    Upload File
    @Command ~ $  
    Current File : /home/m/e/h/meharicl/www/phpBB3/vendor/zendframework/zend-code/src/Scanner/ParameterScanner.php

    <?php
    /**
     * Zend Framework (http://framework.zend.com/)
     *
     * @link      http://github.com/zendframework/zf2 for the canonical source repository
     * @copyright Copyright (c) 2005-2016 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;
    
    use function current;
    use function is_string;
    use function ltrim;
    use function next;
    use function reset;
    use function trim;
    
    class ParameterScanner
    {
        /**
         * @var bool
         */
        protected $isScanned = false;
    
        /**
         * @var null|ClassScanner
         */
        protected $declaringScannerClass;
    
        /**
         * @var null|string
         */
        protected $declaringClass;
    
        /**
         * @var null|MethodScanner
         */
        protected $declaringScannerFunction;
    
        /**
         * @var null|string
         */
        protected $declaringFunction;
    
        /**
         * @var null|string
         */
        protected $defaultValue;
    
        /**
         * @var null|string
         */
        protected $class;
    
        /**
         * @var null|string
         */
        protected $name;
    
        /**
         * @var null|int
         */
        protected $position;
    
        /**
         * @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;
    
        /**
         * @var null|NameInformation
         */
        protected $nameInformation;
    
        /**
         * @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;
        }
    }