在PHP中考虑这个函数:
function test($name, $age) {}
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式提取参数名称(用于自动生成自定义文档),以便我可以执行以下操作:
get_func_argNames('test');
Run Code Online (Sandbox Code Playgroud)
它会返回:
Array['name','age']
Run Code Online (Sandbox Code Playgroud)
这在PHP中甚至可能吗?
Tom*_*igh 67
你可以使用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
)
Run Code Online (Sandbox Code Playgroud)
Luc*_*nte 13
现在是2019年,没人说这个吗?
只需使用get_defined_vars():
class Foo {
public function bar($a, $b) {
var_dump(get_defined_vars());
}
}
(new Foo)->bar('first', 'second');
Run Code Online (Sandbox Code Playgroud)
结果:
array(2) {
["a"]=>
string(5) "first"
["b"]=>
string(6) "second"
}
Run Code Online (Sandbox Code Playgroud)
这是我在寻找反射而不是其他东西时碰到的一个老问题,但是我将抛弃当前的实现,以便对他人有所帮助。使用array_map
对于方法
$ReflectionMethod = new \ReflectionMethod($class, $method);
$params = $ReflectionMethod->getParameters();
$paramNames = array_map(function( $item ){
return $item->getName();
}, $params);
Run Code Online (Sandbox Code Playgroud)
对于功能
$ReflectionFunction = new \ReflectionFunction('preg_replace');
$params = $ReflectionFunction->getParameters();
$paramNames = array_map(function( $item ){
return $item->getName();
}, $params);
echo '<pre>';
var_export( $paramNames );
Run Code Online (Sandbox Code Playgroud)
产出
array(
'0' => 'regex',
'1' => 'replace',
'2' => 'subject',
'3' => 'limit',
'4' => 'count'
)
Run Code Online (Sandbox Code Playgroud)
干杯,
| 归档时间: |
|
| 查看次数: |
20205 次 |
| 最近记录: |