最近閒來無事,所以對PHP這門語言進行更深一層的瞭解,對原始碼進行一番研究,是如何執行我們寫的PHP指令碼的。
1.1.3 PHP的相關組成
1.1.3.1 SAPI
PHP本身可以理解為是一個庫函式,提供語言的編譯與執行服務,它有標準的輸入、輸出,而SAPI是PHP的接入層,它接收使用者的請求,然後呼叫PHP核心提供的一些介面完成PHP指令碼的執行,所以嚴格意義上講SAPI並不算PHP核心的一部分。
PHP的角色就好比是leveldb,它實現了基本儲存功能,但是沒有網路處理模組,而我們基於leveldb實現的完整儲存服務就好比是SAPI。
PHP中常用的SAPI有cli、php-fpm,cli是命令列下執行PHP指令碼的實現:bin/php script.php,它是單程式的,處理模型比較簡單,而php-fpm相對比較複雜,它實現了網路處理模組,用於與web伺服器互動。
1.1.3.2 Zend引擎
Zend是PHP語言實現的最為重要的部分,是PHP最基礎、最核心的部分,它的原始碼在/Zend目錄下,PHP程式碼從編譯到執行都是由Zend完成的,後面章節絕大部分的原始碼分析都是針對Zend的。Zend整體由兩個部分組成:
編譯器: 負責將PHP程式碼編譯為抽象語法樹,然後進一步編譯為可執行的opcodes,這個過程相當於GCC的工作,編譯器是一個語言實現的基礎
執行器: 負責執行編譯器輸出的opcodes,也就是執行PHP指令碼中編寫的程式碼邏輯
2.相關文章
[[譯] 理解 PHP 內部函式的定義(給PHP開發者的PHP原始碼-第二部分)][1]