2015-09-14 64 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() 
);