如何在PHP解析器中获取全局变量的索引
我正在用它来构建AST。然后我想找到全局变量的索引,比如如何在PHP解析器中获取全局变量的索引,php,debugging,php-parser,Php,Debugging,Php Parser,我正在用它来构建AST。然后我想找到全局变量的索引,比如$\u POST['firstname'],所以我想找到索引firstname,然后得到它。例如,如何达到全局变量的索引 试验 那么,如何访问索引firstname,并将其存储在变量中呢 来自您以前在中的代码和我作为答案发布的代码 一旦确定所查看的节点是类型ArrayDimFetch,并且变量名是感兴趣的(例如此代码中的\u POST),则可以输出dim节点(我假设的维度)值 更新: 经过进一步的研究,上面的内容相当严格,因为它假设索引是一
$\u POST['firstname']
,所以我想找到索引firstname
,然后得到它。例如,如何达到全局变量的索引
试验
那么,如何访问索引
firstname
,并将其存储在变量中呢 来自您以前在中的代码和我作为答案发布的代码
一旦确定所查看的节点是类型ArrayDimFetch
,并且变量名是感兴趣的(例如此代码中的\u POST
),则可以输出dim
节点(我假设的维度)值
更新:
经过进一步的研究,上面的内容相当严格,因为它假设索引是一个文本。为了使这更灵活,您可以使用pretty printer中的功能,该功能允许节点的输出。那么
echo $node->dim->value;
可以用
$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
echo $prettyPrinter->prettyPrintExpr($node->dim);
因此,如果您的代码中有$\u POST['a.”“b”]
,则可以正确地输出'a'。“b”
/
$traverser->addVisitor(new class extends NodeVisitorAbstract {
public function leaveNode(Node $node) {
if ($node instanceof Node\Expr\ArrayDimFetch
&& $node->var instanceof Node\Expr\Variable
&& $node->var->name === '_POST'
) {
echo $node->dim->value;
}
}
});
echo $node->dim->value;
$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
echo $prettyPrinter->prettyPrintExpr($node->dim);