PHP7新AST如何改写为长尾?

2026-04-03 11:370阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计2166个文字,预计阅读时间需要9分钟。

PHP7新AST如何改写为长尾?

原文内容较长,以下为简化版:

本文大部分内容基于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分钟。

PHP7新AST如何改写为长尾?

原文内容较长,以下为简化版:

本文大部分内容基于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。

执行时间和内存消耗

从以上的步骤来看,这比之前的过程还多了一步,所以按常理来说这反而会增加程序的执行时间和内存的使用。但事实上内存的使用确实增加了,但是执行时间上却有所降低。

阅读全文