Предполагая, что класс, как
class Foo
{
public function GetFeedback($Options) {
$this->checkConnection();
return $this->_client->doGetFeedback(
$Options['feedback-from'],
$Options['feedback-to']
);
}
}
, этот код будет делать то, что вы просите
$reflector = new ReflectionMethod('Foo', 'GetFeedback');
$methodBody = implode(
'',
iterator_to_array(
new LimitIterator(
new SplFileObject($reflector->getFileName()),
$reflector->getStartLine(),
$reflector->getEndLine() - $reflector->getStartLine()
)
)
);
foreach ($reflector->getParameters() as $parameter) {
if (!$parameter->isOptional()) {
preg_match_all(
sprintf('{\$%s\[[\'"](.*)[\'"]\]}', $parameter->getName()),
$methodBody,
$matches
);
}
print_r($matches);
}
Вывод:
Array
(
[0] => Array
(
[0] => $Options['feedback-from']
[1] => $Options['feedback-to']
)
[1] => Array
(
[0] => feedback-from
[1] => feedback-to
)
)
Однако, единственное допустимое использованиедля этого подхода IMO должен сгенерировать докблок, перечисляющий эти опции, и согласиться, что вы, вероятно, делаете это неправильно, если вам это нужно в рабочем коде.