2023-03-11 12:04:29 +03:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Zend Framework (http://framework.zend.com/)
|
|
|
|
*
|
|
|
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
2023-04-01 09:03:34 +03:00
|
|
|
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
2023-03-11 12:04:29 +03:00
|
|
|
* @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;
|
|
|
|
}
|
|
|
|
|
2023-04-01 09:03:34 +03:00
|
|
|
/**
|
|
|
|
* @return string
|
|
|
|
*/
|
2023-03-11 12:04:29 +03:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|