Zend\Code\Scanner\ClassScanner::getProperty PHP Method

getProperty() public method

Return a single property by given name or index of info
public getProperty ( string | integer $propertyNameOrInfoIndex ) : boolean | Zend\Code\Scanner\PropertyScanner
$propertyNameOrInfoIndex string | integer
return boolean | Zend\Code\Scanner\PropertyScanner
    public function getProperty($propertyNameOrInfoIndex)
    {
        $this->scan();
        if (is_int($propertyNameOrInfoIndex)) {
            $info = $this->infos[$propertyNameOrInfoIndex];
            if ($info['type'] != 'property') {
                throw new Exception\InvalidArgumentException('Index of info offset is not about a property');
            }
        } elseif (is_string($propertyNameOrInfoIndex)) {
            $propertyFound = false;
            foreach ($this->infos as $info) {
                if ($info['type'] === 'property' && $info['name'] === $propertyNameOrInfoIndex) {
                    $propertyFound = true;
                    break;
                }
            }
            if (!$propertyFound) {
                return false;
            }
        } else {
            throw new Exception\InvalidArgumentException('Invalid property name of info index type.  Must be of type int or string');
        }
        if (!isset($info)) {
            return false;
        }
        $p = new PropertyScanner(array_slice($this->tokens, $info['tokenStart'], $info['tokenEnd'] - $info['tokenStart'] + 1), $this->nameInformation);
        $p->setClass($this->name);
        $p->setScannerClass($this);
        return $p;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * Return a single property by given name or index of info
  *
  * @param  string|int $propertyNameOrInfoIndex
  * @throws Exception\InvalidArgumentException
  * @return bool|PropertyScanner
  */
 public function getProperty($propertyNameOrInfoIndex)
 {
     if ($this->classScanner->hasProperty($propertyNameOrInfoIndex)) {
         return $this->classScanner->getProperty($propertyNameOrInfoIndex);
     }
     foreach ($this->parentClassScanners as $pClassScanner) {
         if ($pClassScanner->hasProperty($propertyNameOrInfoIndex)) {
             return $pClassScanner->getProperty($propertyNameOrInfoIndex);
         }
     }
     throw new Exception\InvalidArgumentException(sprintf('Property %s not found in %s', $propertyNameOrInfoIndex, $this->classScanner->getName()));
 }