PHP7新AST如何改写为长尾?
- 内容介绍
- 相关推荐
本文共计2166个文字,预计阅读时间需要9分钟。
原文内容较长,以下为简化版:
本文大部分内容基于AST和RFC文档编写而成:[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。
执行时间和内存消耗
从以上的步骤来看,这比之前的过程还多了一步,所以按常理来说这反而会增加程序的执行时间和内存的使用。但事实上内存的使用确实增加了,但是执行时间上却有所降低。
本文共计2166个文字,预计阅读时间需要9分钟。
原文内容较长,以下为简化版:
本文大部分内容基于AST和RFC文档编写而成:[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。
执行时间和内存消耗
从以上的步骤来看,这比之前的过程还多了一步,所以按常理来说这反而会增加程序的执行时间和内存的使用。但事实上内存的使用确实增加了,但是执行时间上却有所降低。

