Из вашего предыдущего кода в Как использовать PHP -Parser, чтобы получить имя глобальной переменной и изменить его и код, который я отправил в качестве ответа.
Как только вы определили что узел, на который вы смотрите, имеет тип ArrayDimFetch
, и имя переменной представляет интерес (например, _POST
в этом коде), тогда вы можете вывести значение узла dim
(размер, который я предполагаю) ...
$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);
Так что, если в вашем коде содержится $_POST['a'."b"]
, это будет правильно выводить 'a' . "b"
/