我正在使用软件包nikic/php-parser来解析用户提供的PHP文件。该文件将具有一些PHP函数,我需要知道哪个函数以及定义的确切偏移量和长度。
例如:
Line | Content
1 | <?php\n
2 | function x() { }\n
3 | x();
在这种情况下,我有一个名为x
的函数,而 offset (function
的起始位置)为 6 ,而< em> length 一直计数到}
,在这种情况下为 16 。
因此,我在解析器上启用了两个属性:startFilePos
和endFilePos
,但是由于某种原因,它不会向我提供这些信息。
答案 0 :(得分:0)
好的,现在我看到了...
我的运行方式如下:
$this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, null, [
'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
]);
但是实际上,第三个参数没有像我期望的那样传递给Lexer,它仅支持不推荐使用的选项throwOnError
。
所以我直接将其应用于Lexer:
$this->parser = (new ParserFactory)->create(ParserFactory::ONLY_PHP7, new Lexer([
'usedAttributes' => [ 'startFilePos', 'endFilePos' ]
]));
现在我可以正确接收文件偏移了。