PHP, Tokenizer, найти все аргументы функции - PullRequest
5 голосов
/ 06 июня 2011

Помогите мне найти все аргументы функции "funcname", используя функцию token_get_all () в исходном коде.Звучит просто, но есть много специальных опций, таких как массивы в качестве параметров или вызов статических методов в качестве параметров.Может быть, есть простое универсальное решение?

UPD:

Мне нужны аргументы функции, переданные при его вызове.Получить их, чтобы быть на внешний анализ файла.Например, есть php-файл:

<?php
funcname('foo');
funcname(array('foo'), 'bar');

Анализатор должен начинаться следующим образом:

$source = file_get_contents('source.php');
$tokens = token_get_all($source);
...

В результате необходимо получить такой список:

[0] => array('foo'),
[1] => array(array('foo'), 'bar')

1 Ответ

5 голосов
/ 06 июня 2011

Вместо того, чтобы использовать токенизатор, используйте отражение. В этом случае используйте ReflectionFunction:

function funcname ($foo, $bar) {

}

$f = new ReflectionFunction('funcname');
foreach ($f->getParameters() as $p) {
    echo $p->getName(), "\n";
}

Это выводит

foo
bar

Вы также можете использовать этот класс и связанные с ним классы (например, ReflectionParameter), чтобы узнать больше информации о функции и ее параметрах, например, является ли параметр необязательным и каково его значение по умолчанию.

...