获取函数';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"
}