PHP7中的新抽象语法树(AST)带来了哪些具体变化?
- 内容介绍
- 相关推荐
本文共计2235个文字,预计阅读时间需要9分钟。
本文字内容主要依据AST和RFC文档编写而成,为了便于理解,以下将从源文档中精选部分内容进行介绍。
原文档不会直接告知你抽象语法树是什么,这需要你自己去理解。以下是简化后的内容:
抽象语法树(AST)是一种表示代码结构的方法,它由节点组成,每个节点代表源代码中的一个元素。通过AST,可以方便地分析、修改和优化代码。
具体内容请参考以下链接:https://wiki.php.net/rfc/abstract_syntax_tree
本文大部分内容参照 AST 的 RFC 文档而成:wiki.php.net/rfc/abstract_syntax_tree,为了易于理解从源文档中节选部分进行介绍。
本文并不会告诉你抽象语法树是什么,这需要你自己去了解,这里只是描述 AST 给 PHP 带来的一些变化。
新的执行过程
PHP7 的内核中有一个重要的变化是加入了 AST。在 PHP5中,从 php 脚本到 opcodes 的执行的过程是:
1、Lexing:词法扫描分析,将源文件转换成 token 流;
2、Parsing:语法分析,在此阶段生成 op arrays。
3、PHP7 中在语法分析阶段不再直接生成 op arrays,而是先生成 AST,所以过程多了一步:
4、Lexing:词法扫描分析,将源文件转换成 token 流;
5、Parsing:语法分析,从 token 流生成抽象语法树;
6、Compilation:从抽象语法树生成 op arrays。
本文共计2235个文字,预计阅读时间需要9分钟。
本文字内容主要依据AST和RFC文档编写而成,为了便于理解,以下将从源文档中精选部分内容进行介绍。
原文档不会直接告知你抽象语法树是什么,这需要你自己去理解。以下是简化后的内容:
抽象语法树(AST)是一种表示代码结构的方法,它由节点组成,每个节点代表源代码中的一个元素。通过AST,可以方便地分析、修改和优化代码。
具体内容请参考以下链接:https://wiki.php.net/rfc/abstract_syntax_tree
本文大部分内容参照 AST 的 RFC 文档而成:wiki.php.net/rfc/abstract_syntax_tree,为了易于理解从源文档中节选部分进行介绍。
本文并不会告诉你抽象语法树是什么,这需要你自己去了解,这里只是描述 AST 给 PHP 带来的一些变化。
新的执行过程
PHP7 的内核中有一个重要的变化是加入了 AST。在 PHP5中,从 php 脚本到 opcodes 的执行的过程是:
1、Lexing:词法扫描分析,将源文件转换成 token 流;
2、Parsing:语法分析,在此阶段生成 op arrays。
3、PHP7 中在语法分析阶段不再直接生成 op arrays,而是先生成 AST,所以过程多了一步:
4、Lexing:词法扫描分析,将源文件转换成 token 流;
5、Parsing:语法分析,从 token 流生成抽象语法树;
6、Compilation:从抽象语法树生成 op arrays。

