Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:函数参数';名字_Php_Anonymous Function - Fatal编程技术网

PHP:函数参数';名字

PHP:函数参数';名字,php,anonymous-function,Php,Anonymous Function,我需要获取匿名函数参数的名称 例如: 从理论上讲,这是可能的,因为var_dump($func)说$func是闭包类的对象,并且具有参数属性,即数组('param1',param2') php.net的官方文档没有描述闭包类的任何方法,这对我很有帮助 我曾尝试直接访问此属性,但PHP死机时出现了致命错误:Closure对象不能有属性 我试图通过get\u object\u vars获取对象变量,但似乎参数属性被定义为私有(无论如何,get\u object\u vars不会返回它) 我知道的唯一

我需要获取匿名函数参数的名称

例如:

从理论上讲,这是可能的,因为
var_dump($func)
$func
闭包
类的对象,并且具有
参数
属性,即
数组('param1',param2')

php.net的官方文档没有描述闭包类的任何方法,这对我很有帮助

我曾尝试直接访问此属性,但PHP死机时出现了致命错误:
Closure对象不能有属性

我试图通过
get\u object\u vars
获取对象变量,但似乎
参数
属性被定义为私有(无论如何,
get\u object\u vars
不会返回它)

我知道的唯一一种方法是截取
var\u dump的输出并对其进行解析,但我们很容易理解,这不是编写脚本的方法=)


对不起,我的英语不好。

目前无法尝试此功能,但请查看:

特别是

也许这会奏效

编辑: 试试这个:

$func = function ( $param1, $param2 ) {
    /* some code */
};

$refFunc = new ReflectionFunction($func);
foreach ($refFunc->getParameters() as $refParameter) {
    echo $refParameter->getName(), '<br />';
}
$func=函数($param1,$param2){
/*一些代码*/
};
$refFunc=新的反射函数($func);
foreach($refFunc->getParameters()作为$refParameter){
echo$refParameter->getName(),“
”; }
是的,这应该可以。您可以将闭包(
$func
在本例中)传递给ReflectionFunction构造函数——请参见Yep!这就是我要说的=)谢谢。@Felix我需要为每个请求打回电话。回调的参数由URL构成,并由regexp解析。因此,我们有一个值列表,但它们的顺序可能不同于回调参数的顺序。例如:请求
/hello/{username}/{email}
,但回调
函数($email,$username){…}
。在源代码中,这个方案看起来像:
请求('/hello/{username}/{email}',函数($email,$username){…})
(假设您可以控制
请求
):在我看来,最好向回调传递一个参数数组:
数组('username'=>'value','email'=>'value')
。Felix:我考虑过JS风格的方法,但认为这种方法更容易理解,也更美观。至少在视觉上。
$func = function ( $param1, $param2 ) {
    /* some code */
};

$refFunc = new ReflectionFunction($func);
foreach ($refFunc->getParameters() as $refParameter) {
    echo $refParameter->getName(), '<br />';
}