获取函数';s参数名称 PHP中的P>考虑这个函数: function test($name, $age) {}

获取函数';s参数名称 PHP中的P>考虑这个函数: function test($name, $age) {},php,Php,我需要以某种方式提取参数名称(用于自动生成自定义文档),以便执行以下操作: get_func_argNames('test'); 它将返回: Array['name','age'] 这在PHP中可能吗?您可以使用: 这是我在寻找反射以外的东西时遇到的一个老问题,但我将放弃我当前的实现,以便它可以帮助其他人。使用数组映射 寻找一种方法 $ReflectionMethod = new \ReflectionMethod($class, $method); $params =

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

get_func_argNames('test');
它将返回:

Array['name','age']
这在PHP中可能吗?

您可以使用:


这是我在寻找反射以外的东西时遇到的一个老问题,但我将放弃我当前的实现,以便它可以帮助其他人。使用数组映射

寻找一种方法

    $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 );

干杯,

如果您需要获取可选属性的默认值,除了Tom Haigh的答案之外:

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


my("something","something");    //result:  array('aaa' => 'something', 'bbb' => 'something');
用于变量类型验证。

func\u get\u args

此外,还存在另一个全局函数:
get\u defined\u vars()
,它不仅返回函数,还返回所有变量。

@Tom Haigh,或者更高级一些:

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

现在是2019年,没人这么说

只需使用
get\u defined\u vars()

class-Foo{
公共酒吧($a$b){
var_dump(get_defined_vars());
}
}
(新Foo)->bar('first','second');
结果:


有什么理由不只是使用PHPDoc自动生成文档吗?相关:非常感谢。如果我想用它来获取类方法的参数,您可以使用ReflectionMethod,例如
newreflectionmethod('classname','methodname')其余的应该是一样的。戈登,你赢了我。ThanksOk,很抱歉说得太慢了,但是有没有办法获取参数的默认值?公共函数测试($age=30)得到我得到的是“30”和“age”?@Gotys:look up ReflectionParameter,你从ReflectionFunction::getParameters()得到一个数组。在上面的示例中,我只使用name属性,但是有一个defaultValue()方法应该可以帮助您。我认为之所以不使用,是因为'result'注释错误
get_defined_vars()
将输出:
array('aaa'=>'something','bbb'=>'something')。另外,请注意,该函数将为您提供调用之前定义的所有变量,而不仅仅是函数参数。@T.Todua不客气。但你第一次做对了
get\u defined\u vars()
是正确的答案,只要您知道何时使用它。只是对输出结果的评论是错误的。但看起来您也更改了答案以反映
func\u get\u args()
。我不相信这会给变量命名键,就像你们在那个里指出的,只是数字索引。与
get\u defined\u vars()
不同,
func\u get\u args()
也会忽略由默认值而不是参数设置的任何参数。使用此代码,我不会得到相同的结果。我有
数组(0=>'something',1=>'something')。您使用的php版本是什么?
func\u get\u args()
不将参数名作为数组键返回,而是将其顺序作为int。
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;
}
function my($aaa, $bbb){
     var_dump(  func_get_args() );  
}


my("something","something");    //result:  array('aaa' => 'something', 'bbb' => 'something');
function getArguments( $funcName ) {
    return array_map( function( $parameter ) { return $parameter->name; },
        (new ReflectionFunction($funcName))->getParameters() );
}

// var_dump( getArguments('getArguments') );
array(2) {
  ["a"]=>
  string(5) "first"
  ["b"]=>
  string(6) "second"
}