Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP解析器中获取全局变量的索引_Php_Debugging_Php Parser - Fatal编程技术网

如何在PHP解析器中获取全局变量的索引

如何在PHP解析器中获取全局变量的索引,php,debugging,php-parser,Php,Debugging,Php Parser,我正在用它来构建AST。然后我想找到全局变量的索引,比如$\u POST['firstname'],所以我想找到索引firstname,然后得到它。例如,如何达到全局变量的索引 试验 那么,如何访问索引firstname,并将其存储在变量中呢 来自您以前在中的代码和我作为答案发布的代码 一旦确定所查看的节点是类型ArrayDimFetch,并且变量名是感兴趣的(例如此代码中的\u POST),则可以输出dim节点(我假设的维度)值 更新: 经过进一步的研究,上面的内容相当严格,因为它假设索引是一

我正在用它来构建AST。然后我想找到全局变量的索引,比如
$\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);