PHP 7内核架构

经过上一节对 PHP 代码执行原理的简介,我们大概清楚了 PHP 7 执行脉络的各个主要部分的基本工作是什么,但是各个部分的输入/输出是如何串联的呢?这就是接下来要介绍的重要角色——Zend 引擎(Zend Engine),也就是前文提到的引擎。Zend 引擎中包含了编译器和解释器,从 PHP 代码到 opcode 的执行,均由 Zend 引擎完成。

Zend 引擎除了实现了 PHP 的核心功能,还提供了一套接口,让 PHP 可以在更多的场景中使用,如命令行环境、Web 环境等。

我们通过图2-4,试图描述以 Zend 引擎为核心的组织架构。

image 2024 06 06 23 42 39 112
Figure 1. 图2-4 PHP7 源码架构

该架构图大致分为四大部分。

  1. Zend 引擎:前文介绍的词法/语法分析、AST 编译和 opcodes 的执行均在 Zend 引擎中实现。此外,PHP 的变量设计、内存管理、进程管理等也在引擎层实现。引擎为 PHP 提供了基础服务,PHP 的可靠性和高性能都依赖引擎的基础支撑。同时,Zend 引擎的可扩展性,还是 PHP 得以大规模应用的重要原因之一。

  2. PHP 层:Zend 引擎为 PHP 提供基础能力(如内存分配和回收),而来自外部的交互则需要通过 PHP 层来处理。

  3. SAPI: SAPI 是 Server API 的缩写,其中包含了常见的 cli SAPI 和 fpm SAPI。PHP 定义好输入/输出规范,依据此规范与 PHP 交互的一方都可以称为 Server。这样做的好处便是 Server 方可以忽略 PHP 的内部实现,只要遵守定义好的 SAPI 协议,便可完成交互,极大丰富了 PHP 可以支持的 Server 类型。

  4. 扩展部分:Zend 引擎提供了核心能力和接口规范。在此基础上开发的扩展,为 PHP 代码的性能和功能的多样性提供了更丰富的选项。

本书的后续章节基本上也是按照这里的组织结构,细分展开。