<?php
class TestSampleClass {
}
class MethodReflection extends ReflectionMethod
{
protected $annotations = null;
public function getDocBlock()
{
if ('' == $this->getDocComment()) {
return false;
}
$instance = new DocBlockReflection($this);
return $instance;
}
public function getAnnotations(AnnotationManager $annotationManager)
{
if (($docComment = $this->getDocComment()) == '') {
return false;
}
if (!$this->annotations) {
$cachingFileScanner = new CachingFileScanner($this->getFileName());
$nameInformation = $cachingFileScanner->getClassNameInformation($this->getDeclaringClass()->getName());
$this->annotations = new AnnotationScanner($annotationManager, $docComment, $nameInformation);
}
return $this->annotations;
}
public function getDeclaringClass()
{
$phpReflection = parent::getDeclaringClass();
$zendReflection = new ClassReflection($phpReflection->getName());
unset($phpReflection);
return $zendReflection;
}
public function getParameters()
{
$phpReflections = parent::getParameters();
$zendReflections = array();
while ($phpReflections && ($phpReflection = array_shift($phpReflections))) {
$instance = new ParameterReflection(array($this->getDeclaringClass()->getName(),
$this->getName()), $phpReflection->getName());
$zendReflections[] = $instance;
unset($phpReflection);
}
unset($phpReflections);
return $zendReflections;
}
}
class ParameterReflection extends ReflectionParameter
{
protected $isFromMethod = false;
public function getDeclaringClass()
{
$phpReflection = parent::getDeclaringClass();
$zendReflection = new ReflectionClass($phpReflection->getName());
unset($phpReflection);
return $zendReflection;
}
public function getClass()
{
$phpReflection = parent::getClass();
if ($phpReflection == null) {
return null;
}
$zendReflection = new ClassReflection($phpReflection->getName());
unset($phpReflection);
return $zendReflection;
}
public function getDeclaringFunction($reflectionClass = null)
{
$phpReflection = parent::getDeclaringFunction();
if ($phpReflection instanceof ReflectionMethod) {
$zendReflection = new MethodReflection($this->getDeclaringClass()->getName(), $phpReflection->getName());
} else {
$zendReflection = new ReflectionFunction($phpReflection->getName());
}
unset($phpReflection);
return $zendReflection;
}
public function getType()
{
$type = null;
$checkDefault = true;
if ($this->isArray()) {
$type = 'array';
} elseif (($class = $this->getClass()) instanceof ReflectionClass) {
$type = $class->getName();
} elseif ($docBlock = $this->getDeclaringFunction()->getDocBlock()) {
$params = $docBlock->getTags('param');
if (isset($params[$this->getPosition()])) {
$type = $params[$this->getPosition()]->getType();
$checkDefault = false;
}
}
if ($this->isDefaultValueAvailable() && $checkDefault) {
if ($type === null) {
$value = $this->getDefaultValue();
$type = strtolower(gettype($value));
switch ($type) {
case 'boolean' : $type = 'bool'; break;
case 'integer' : $type = 'int'; break;
}
} else {
if ($this->getDefaultValue() === null) {
$type .= '|null';
}
}
}
return $type;
}
}
class TestSampleClass5
{
/**
* @param int $one Description for one
* @param int Description for two
* @param string $three Description for three
* which spans multiple lines
*/
public function doSomething($one, $two = 2, $three = 'three', $empty, $string = 'somestring', $null = null, $int = 1, $bool = true, array $array, array $arrayOrNull = null, TestSampleClass $class, TestSampleClass $classOrNull = null)
{
return 'mixedValue';
}
}
$tests = array(
array('one', 'int'),
array('two', 'int'),
array('three', 'string'),
array('empty', null),
array('string', 'string'),
array('null', 'null'),
array('int', 'int'),
array('bool', 'bool'),
array('array', 'array'),
array('arrayOrNull','array|null'),
array('class', 'ZendTest\Code\Reflection\TestAsset\TestSampleClass'),
array('classOrNull','ZendTest\Code\Reflection\TestAsset\TestSampleClass|null'),
);
foreach($tests as $test)
{
$param = new ParameterReflection(array('TestSampleClass5', 'doSomething'), $test[0]);
var_dump($param->getType());
}
preferences:
79.39 ms | 402 KiB | 5 Q