获取函数的参数名称

时间:2010-04-22 16:05:22

标签: php

在PHP中考虑这个函数:

function test($name, $age) {}

我需要以某种方式提取参数名称(用于自动生成自定义文档),以便我可以执行以下操作:

get_func_argNames('test');

它将返回:

Array['name','age']

这在PHP中是否可行?

6 个答案:

答案 0 :(得分:64)

您可以使用Reflection

function get_func_argNames($funcName) {
    $f = new ReflectionFunction($funcName);
    $result = array();
    foreach ($f->getParameters() as $param) {
        $result[] = $param->name;   
    }
    return $result;
}

print_r(get_func_argNames('get_func_argNames'));


//output
Array
(
    [0] => funcName
)

答案 1 :(得分:4)

这是一个古老的问题,我在寻找除了Reflection之外的其他东西时发生了,但我会抛弃我当前的实现,以便它可以帮助其他人。使用array_map

方法

    $ReflectionMethod =  new \ReflectionMethod($class, $method);

    $params = $ReflectionMethod->getParameters();

    $paramNames = array_map(function( $item ){
        return $item->getName();
    }, $params);

对于一个功能

    $ReflectionFunction =  new \ReflectionFunction('preg_replace');
    $params = $ReflectionFunction->getParameters();
    $paramNames = array_map(function( $item ){
        return $item->getName();
    }, $params);
    echo '<pre>';
    var_export( $paramNames );

输出

array(
    '0' => 'regex',
    '1' => 'replace',
    '2' => 'subject',
    '3' => 'limit',
    '4' => 'count'
)

干杯,

答案 2 :(得分:4)

如果你需要获得可选属性的默认值,除了Tom Haigh的回答:

function function_get_names($funcName){

    $attribute_names = [];

    if(function_exists($funcName)){

        $fx = new ReflectionFunction($funcName);

        foreach ($fx->getParameters() as $param){

            $attribute_names[$param->name] = NULL;

            if ($param->isOptional()){

                $attribute_names[$param->name] = $param->getDefaultValue();
            }
        }           
    }

    return $attribute_names;
}

对变量类型验证很有用。

答案 3 :(得分:2)

现在是2019年,没有人这么说吗?

只需使用get_defined_vars()

class Foo {
  public function bar($a, $b) {
    var_dump(get_defined_vars());
  }
}

(new Foo)->bar('first', 'second');

结果:

array(2) {
  ["a"]=>
  string(5) "first"
  ["b"]=>
  string(6) "second"
}

答案 4 :(得分:1)

func_get_args

function my($aaa, $bbb){
     var_dump(  func_get_args() );  
}


my("something","something");    //result:  array('aaa' => 'something', 'bbb' => 'something');

另外,还存在另一个全局函数:get_defined_vars(),它不仅返回函数,还返回所有变量。

答案 5 :(得分:1)

@Tom Haigh,或者做得更优雅:

function getArguments( $funcName ) {
    return array_map( function( $parameter ) { return $parameter->name; },
        (new ReflectionFunction($funcName))->getParameters() );
}

// var_dump( getArguments('getArguments') );