PHP: имена аргументов функции - PullRequest
5 голосов
/ 02 мая 2011

Мне нужно получить имена аргументов анонимной функции.

например:.

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

Теоретически это возможно, потому что var_dump($func) говорит, что $func является объектом класса Closure и имеет свойство parameter, равное array('param1', 'param2').

Официальная документация на php.net не описывает методы класса Closure, которые могут мне помочь.

Я пытался получить доступ к этому свойству напрямую, но PHP умер с фатальной ошибкой: Closure object cannot have properties.

Я пытался получить объектные переменные с помощью get_object_vars, но, похоже, свойство parameter считается закрытым (в любом случае get_object_vars не возвращает его).

Единственный известный мне способ - перехватить вывод var_dump и проанализировать его, но, как мы легко понимаем, это не тот способ, которым мы должны писать наши сценарии =)

Извините за мой плохой английский.

1 Ответ

9 голосов
/ 02 мая 2011

Не могу попробовать это в данный момент, но посмотрите:

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

особенно

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

Возможноэто сработает.

Редактировать: Попробуйте это:

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

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