PHP源码研究
最近閑來無事,所以對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]
總結
- 上一篇: 一个工程师对流程管理的思考
- 下一篇: web前端超出两行用省略号表示