0

我正在使用包nikic/php-parser来解析用户提供的 PHP 文件。该文件将包含一些 PHP 函数,我需要知道哪些函数以及定义的确切偏移量和长度。

例如:

Line | Content
   1 | <?php\n
   2 | function x() { }\n
   3 | x();

在这种情况下,我有一个名为x的函数,偏移量function开始的地方)是6,并且长度一直计算到},在这种情况下是16

所以我在 parser:startFilePos和上启用了两个属性endFilePos,但由于某种原因,它不会给我这些信息。

4

1 回答 1

0

好吧,现在我明白了……

我正在运行它:

$this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, null, [
    'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
]);

但实际上第三个参数并没有像我预期的那样传递给 Lexer,它只支持 deprecated option throwOnError

所以我直接将它应用到 Lexer:

$this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, new Lexer([
    'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
]));

现在我正确接收到文件偏移量。

于 2019-05-10T16:17:12.967 回答