Мне нужно получить имена анонимных аргументов функции.
Например:
$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
.
Я попытался получить объектные vars by get_object_vars
но кажется, что свойство parameter
объявлено как private (в любом случае get_object_vars
не возвращает его).
Единственный способ, которым я знаю, – перехватить вывод var_dump
и проанализировать его, но поскольку мы легко понимаем, что это не то, как мы должны писать наши скрипты =)
Извините за мой плохой английский.
Не могу попробовать это на данный момент, но посмотрите:
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 />'; }