mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-03-01 15:21:02 +03:00
112 lines
2.8 KiB
PHP
112 lines
2.8 KiB
PHP
|
<?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\Reflection;
|
||
|
|
||
|
use ReflectionProperty as PhpReflectionProperty;
|
||
|
use Zend\Code\Annotation\AnnotationManager;
|
||
|
use Zend\Code\Scanner\AnnotationScanner;
|
||
|
use Zend\Code\Scanner\CachingFileScanner;
|
||
|
|
||
|
/**
|
||
|
* @todo implement line numbers
|
||
|
*/
|
||
|
class PropertyReflection extends PhpReflectionProperty implements ReflectionInterface
|
||
|
{
|
||
|
/**
|
||
|
* @var AnnotationScanner
|
||
|
*/
|
||
|
protected $annotations;
|
||
|
|
||
|
/**
|
||
|
* Get declaring class reflection object
|
||
|
*
|
||
|
* @return ClassReflection
|
||
|
*/
|
||
|
public function getDeclaringClass()
|
||
|
{
|
||
|
$phpReflection = parent::getDeclaringClass();
|
||
|
$zendReflection = new ClassReflection($phpReflection->getName());
|
||
|
unset($phpReflection);
|
||
|
|
||
|
return $zendReflection;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get DocBlock comment
|
||
|
*
|
||
|
* @return string|false False if no DocBlock defined
|
||
|
*/
|
||
|
public function getDocComment()
|
||
|
{
|
||
|
return parent::getDocComment();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return false|DocBlockReflection
|
||
|
*/
|
||
|
public function getDocBlock()
|
||
|
{
|
||
|
if (!($docComment = $this->getDocComment())) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$docBlockReflection = new DocBlockReflection($docComment);
|
||
|
|
||
|
return $docBlockReflection;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param AnnotationManager $annotationManager
|
||
|
* @return AnnotationScanner
|
||
|
*/
|
||
|
public function getAnnotations(AnnotationManager $annotationManager)
|
||
|
{
|
||
|
if (null !== $this->annotations) {
|
||
|
return $this->annotations;
|
||
|
}
|
||
|
|
||
|
if (($docComment = $this->getDocComment()) == '') {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$class = $this->getDeclaringClass();
|
||
|
$cachingFileScanner = $this->createFileScanner($class->getFileName());
|
||
|
$nameInformation = $cachingFileScanner->getClassNameInformation($class->getName());
|
||
|
|
||
|
if (!$nameInformation) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$this->annotations = new AnnotationScanner($annotationManager, $docComment, $nameInformation);
|
||
|
|
||
|
return $this->annotations;
|
||
|
}
|
||
|
|
||
|
public function toString()
|
||
|
{
|
||
|
return $this->__toString();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a new FileScanner instance.
|
||
|
*
|
||
|
* By having this as a seperate method it allows the method to be overridden
|
||
|
* if a different FileScanner is needed.
|
||
|
*
|
||
|
* @param string $filename
|
||
|
*
|
||
|
* @return CachingFileScanner
|
||
|
*/
|
||
|
protected function createFileScanner($filename)
|
||
|
{
|
||
|
return new CachingFileScanner($filename);
|
||
|
}
|
||
|
}
|