2015-09-14 86 views
2

我想获得类内部的方法列表以及它们的参数和默认值。我怎样才能做到这一点?下面是我使用的代码:php获取方法参数的默认值

$class = new ReflectionClass($className); 
$methods = []; 
foreach($class->getMethods() as $method){ 
    if($method->class == $className && $method->name != '__construct'){ 
     $obj = []; 
     $obj['controller'] = $className; 
     $obj['action'] = $method->name; 
     $obj['params'] = array_map(function($value){return $value->name;}, $method->getParameters()); 
     $methods[] = $obj; 
    } 
} 

以上代码的样本结果是这样的:

Array(
    [0] => Array 
    (
     [controller] => Controller, 
     [action] => function, 
     [params] => Array 
     (
      [0] => offset, 
      [1] => limit 
     ) 
    ) 
) 

我怎样才能得到函数参数的默认值?

+1

您的标题应该是更具体,写得很好。因为当我看到标题 – alamin

+0

时,我误以为它是另一篇文章。通过使用'getParameters()'获得ReflectionParameter对象的列表。您可以使用类'[getDefaultValue](http://php.net/manual/en/reflectionparameter.getdefaultvalue.php)方法从这些对象中获取默认值。 –

+0

IDK,如果这是您要查找的内容,但他可能会有所帮助:http://geneticcoder.blogspot.com/2015/05/logging-class-usage-in-php.html –

回答

1

在您的参数array_map函数中,您可以使用->isDefaultValueAvailable()来插入参数是否具有默认值的检查,如果是 - 使用->getDefaultValue()进行列出。根据您的代码查看下面的示例,并根据您的需求进行更改。

而不是

$obj['params'] = array_map(
    function($value){return $value->name;}, 
    $method->getParameters() 
); 

使用

$obj['params'] = array_map(
    function($value){ 
    return $value->name. 
     ($value->isDefaultValueAvailable() ? '='.$value->getDefaultValue() : ''); 
    }, 
    $method->getParameters() 
);