Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: function arguments' names

I need to get anonymous function arguments' names.

E.g.:

$func = function ( $param1, $param2 ) { ... };
$names = DO_SOMETHING($func); 
// after this $names should become something like array('param1', param2')

Theoretically, it is possible because var_dump($func) says that $func is the object of Closure class and have parameter property which is array('param1', 'param2').

Official documentation at php.net describes no methods of Closure class, which can help me.

I've tried to access this property directly, but PHP died with fatal error: Closure object cannot have properties.

I've tried to get object vars by get_object_vars but it seems the parameter property is declated as private (anyway, get_object_vars does not return it).

The only one way I know -- to intercept the output of var_dump and parse it, but as we easily understand this is not the way we should write our scripts =)

Sorry for my bad english.

like image 589
Konstantin Likhter Avatar asked May 02 '11 08:05

Konstantin Likhter


1 Answers

Can't try this at the moment, but have a look at:

http://www.php.net/manual/en/class.reflectionfunction.php

especially

http://www.php.net/manual/en/reflectionfunctionabstract.getparameters.php

Maybe this will do the trick.

Edit: Try this:

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

$refFunc = new ReflectionFunction($func);
foreach ($refFunc->getParameters() as $refParameter) {
    echo $refParameter->getName(), '<br />';
}
like image 127
Yoshi Avatar answered Nov 15 '22 10:11

Yoshi