从ReflectionParameter中提取类型提示

时间:2015-10-01 16:11:19

标签: php reflection

class C 
{
    function methodA(Exception $a, array $id){}
}

function getClassName(ReflectionParameter $param) {
    $regex = '/\[([^\]]*)\]/';
    preg_match($regex, $param->__toString(), $matches);
    return isset($matches[1]) ? $matches[1] : null;
}

foreach( new ReflectionMethod('C', 'methodA')->getParameters() as $param)
{
    echo getClassName($param);
}

希望返回的值只是'Exception'和'array'而不是“Exception $ a”和“array $ id”。正则表达式应该是什么。在php 5.3上工作

1 个答案:

答案 0 :(得分:1)

只需使用Reflection类

foreach( (new ReflectionMethod('C', 'methodA'))->getParameters() as $param)
{
    $class = $param->getClass();
    if ($class) {
        echo $class->getName()."\n";
    } elseif ($param->isArray()) {
        echo "array\n";
    }  else {
        echo "unknown\n";
    }
}