1. 程式人生 > >關於PHP底層執行機制與原理的思考之建立一個簡單的PHP核心架構圖

關於PHP底層執行機制與原理的思考之建立一個簡單的PHP核心架構圖

    提到這個PHP底層的執行原理和機制,如果要用一張圖來描述的話,相信大家的腦海裡都會浮現下面的這張圖:


    誠然,PHP的核心架構確實是如上圖所示。不管是讓誰來說,也差不多就是這麼多。但是,我今天寫這篇部落格的原因,無非就是加深下,自己對這個PHP核心架構的一些理解。

    首先,從整體來說,PHP可以細分為四個層次。最核心的,就是Zend引擎。其次呢,就是和它搭配的EXT(extensions)這個部分了。再來就是sapi(Server Application Programming Interface,也就是服務端應用程式設計介面)這個部分,最後呢,就是上層應用這部分,其實就是我們平時編寫的PHP程式。

    有了上面這一些認知後,我們就可以按著重要的層次來逐個瞭解這些東西。跟別的知識一樣,我們得先在腦海裡有了一個大致的架構之後,完事再慢慢地填充它。廢話不多說,咱們先來看,zend引擎。

    zend這個東西呢,它的整體用純C實現,是PHP的核心部分,它可以將PHP程式碼翻譯(詞法、語法解析等一系列編譯過程)為可執行的opcode來進行處理並實現相應的處理方法。完事呢,它還實現了基本的資料結構(如:hashtable、OO),以及記憶體分配機制及管理,並且提供了相應的api方法供外部呼叫。總之呢,它是一切的核心,所有的外圍功能均圍繞Zend實現。

    再來看EXT這個鬼。從圖片上大家可以看出來,它是緊緊挨著並且圍繞著zend引擎的,所以大家可以推理出來它與zend的關係應當是很緊密的。它是通過元件式的方式提供各種基礎服務,比如我們常見的各種內建函式(array系列)、標準庫等都是通過extension來實現。同樣,我們也可以根據需要實現自己的extension以達到功能擴充套件、效能優化等目的(如貼吧正在使用的PHP中間層、富文字解析就是extension的典型應用)。

    好,再來看下sapi這個鬼。它可以通過一系列鉤子函式,使得PHP可以和外圍互動資料,這是PHP非常優雅和成功的一個設計,通過sapi成功的將PHP本身和上層應用解耦隔離,PHP可以不再考慮如何針對不同應用進行相容,而應用本身也可以針對自己的特點實現不同的處理方式。

    再來就是什麼上層應用這個東西了。其實我們平常編碼就可以看成通過呼叫不同的sapi方式得到各種各樣的應用模式,如通過webserver實現web應用、在命令列下以指令碼方式執行等等。

    到這裡,基本的架構就可以在腦海裡建立起來了。在這裡呢,跟大家再分享一句比較有名的話,可以形象的解釋PHP各個層次之間的關係,這句話就是:如果PHP是一輛車,那麼車的框架就是PHP本身,Zend是車的引擎(發動機),Ext下面的各種元件就是車的輪子,Sapi可以看做是公路,車可以跑在不同型別的公路上,而一次PHP程式的執行就是汽車跑在公路上。因此,我們需要:效能優異的引擎+合適的車輪+正確的跑道。

    好啦,本文就到這裡了。關於底層執行原理與機制,肯定不是一句兩句話可以說的完的,後期會陸續更新上的。如果感覺不錯的話,請多多點贊支援哦。。。