PHP總共有三個模塊:內核、Zend引擎、以及擴展層php
當ZE執行程序時可能會須要鏈接若干擴展,這時ZE將控制權交給擴展,等處理完特定任務後再返還;
最後,ZE將程序運行結果返回給PHP內核,它再將結果傳送給SAPI層,最終輸出到瀏覽器上。
從圖上能夠看出,php從下到上是一個4層體系mysql
Zend總體用純c實現,是php的內核部分,它將php代碼翻譯(詞法、語法解析等一系列編譯過程)爲可執行opcode的處理並實現相應的處理方法、實現了基本的數據結構(如hashtable、oo)、內存分配及管理、提供了相應的api方法供外部調用,是一切的核心,全部的外圍功能均圍繞zend實現。linux
圍繞着zend引擎,extensions經過組件式的方式提供各類基礎服務,咱們常見的各類內置函數(如array系列)、標準庫等都是經過extension來實現,用戶也能夠根據須要實現本身的extension以達到功能擴展、性能優化等目的(如貼吧正在使用的php中間層、富文本解析就是extension的典型應用)。web
Sapi全稱是Server Application Programming Interface,也就是服務端應用編程接口,sapi經過一系列鉤子函數,使得php能夠和外圍交互數據,這是php很是優雅和成功的一個設計,經過sapi成功的將php自己和上層應用解耦隔離,php能夠再也不考慮如何針對不一樣應用進行兼容,而應用自己也能夠針對本身的特色實現不一樣的處理方式。後面將在sapi章節中介紹sql
這就是咱們平時編寫的php程序,經過不一樣的sapi方式獲得各類各樣的應用模式,如經過webserver實現web應用、在命令行下以腳本方式運行等等。數據庫
引擎(Zend)+組件(ext)的模式下降內部耦合apache
中間層(sapi)隔絕web server和php編程
若是php是一輛車,那麼車的框架就是php自己Zend是車的引擎(發動機)api
Ext下面的各類組件就是車的輪子瀏覽器
Sapi能夠看作是公路,車能夠跑在不一樣類型的公路上
而一次php程序的執行就是汽車跑在公路上。
所以,咱們須要:性能優異的引擎+合適的車輪+正確的跑道
從下往上四層: