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

标签 php tokenize

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

更新:

我需要你调用它时传递的函数参数。让他们对文件进行外部分析。例如,有一个 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')

最佳答案

与其使用分词器,不如使用反射。在这种情况下,使用 ReflectionFunction :

function funcname ($foo, $bar) {

}

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

这输出

foo
bar

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

关于PHP, Tokenizer, 找到函数的所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6248331/

相关文章:

javascript - 如何使用AJAX将数据插入mysql数据库(无需刷新整个页面)

php - MySQL 数据库表中的 90 列

c - Flex 默认规则

java - 使用正则表达式解析大字符串以获取 java.lang.StackOverflowError 错误

php - 如何在没有 ffmpeg 的情况下在 php 中创建缩略图并将视频转换为 mp4?

php - preg_replace 密码过滤器

oracle - 使用 cfprocparam 将数组或列表导入 Oracle

python - 如何查找列表中句子列表中每个单词的引理和频率计数?

python - Python 中 C++ 的简单分词器

java - 将服务器的结果与java 2ME中的字符串进行比较