PHP深入理解-PHP架構佈局
阿新 • • 發佈:2018-12-17
本文基於《PHP 核心剖析》與 《PHP7底層設計與原始碼實現》所記筆記。
對PHP核心的深入理解有助於我們對PHP的整體認識,對於業務層初期發展我們可以只瞭解基本語言的邏輯就可以寫出符合業務的程式碼,但是隨著業務的發展我們通過分析原始碼,編寫擴充套件,深入瞭解PHP內部機制,幫助我們理解PHP內部實現邏輯,更好助力業務發展.
執行流程
從上圖中看出主要從解析PHPCode到執行主要經過了四個階段.
獲取token可以通過Token_get_all('<?php echo "str";>')
函式獲取token資訊.
抽象語法樹主要將直譯器和編譯器進行解耦.
opcodes最終執行的指令,例如ZEND_ECHO:本質還是一個對應的C函式.
架構結構
Zend層為上層的PHP層提供一些基礎的記憶體管理以及資料結構等.
SAPI層為最上層和Server進行通訊,封裝了不同的通訊型別,cgi,fast-cgi,cli等.
目錄結構
sapi
存放根據不同環境支援的上層API互動形式,實現了不同的輸入輸出形式.
Zend
存放PHP相關的核心程式碼,如前所述記憶體管理等.
main
負責與Zend層互動的入口,還有一些鉤子函式.
ext
主要是擴充套件相關的目錄.通過ext_skel
命令生成自定的模組.會預設安裝到這個目錄.
TSRM
執行緒資源管理相關的目錄,一般只有和Apache結合使用時會涉及到執行緒資源管理相關的程式碼.
與Nginx相關的一般只會用到FastCGI協議不涉及到TSRM模組.