PHP,Tokenizer,查找函数的所有参数

发布于 2024-11-13 06:22:57 字数 494 浏览 2 评论 0原文

帮助我在源代码中使用函数 token_get_all() 找到函数“funcname”的所有参数。听起来很简单,但是有很多特殊的选项,比如数组作为参数或者调用静态方法作为参数。也许有一个简单的通用解决方案?

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')

Help me find all the arguments of the function "funcname" using the function token_get_all() in the source code. It sounds simple, but there are many special options, such as arrays as parameters or call static methods as parameters. Maybe there's a simple universal solution?

UPD:

I need the function arguments passed when you call it. Get them to be at an external analysis of the file. For example, there is a php-file:

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

The analyzer should begin as follows:

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

As a result, need to get a list like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自此以后,行同陌路 2024-11-20 06:22:57

不使用分词器,而是使用反射。在这种情况下,使用 ReflectionFunction

function funcname ($foo, $bar) {

}

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

此输出

foo
bar

您也可以使用此类和相关类(例如 ReflectionParameter)来查找有关函数及其参数的更多信息,例如参数是否可选以及其默认值是什么。

Rather than using a tokenizer, use reflection. In this case, use ReflectionFunction:

function funcname ($foo, $bar) {

}

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

This outputs

foo
bar

You can also use this class and related classes (such as ReflectionParameter) to find out more information about a function and its parameters, such as whether a parameter is optional and what its default value is.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文