在開始這個專題以前,先說一點題外話。大多數人學習編程語言的時候,首先關注的是這種語言的語法及其經常使用函數。反正,我學習C,Java,Php等語言就是按照這樣的方式開始的。通常狀況下,這個階段須要一個月左右的時間就會徹底掌握,並能基本熟練地使用。對於已有經驗的同窗,可能時間更短。其實各類語言的語法和經常使用函數都差異不大,有不少相通的地方。若是您在學習一種編程語言的時候,拿一些真正的項目任務做爲實踐,效果更佳,實踐遠勝於理論。
咱們在掌握了一門編程語言以後,又會向兩個方向發展:一個方向是向上延伸,從事系統框架的探索;另外一方向是向下延伸,從事系統底層方面的研究,我大致畫了一下這個學習過程的曲線。
注:雖然個人形象一直用着「高高手」,但我只是個菜鳥,若有雷同,純屬巧合,歡迎善意拍磚。
Php的語法很是簡單,它不須要具有不少的知識就能上手,好比:你學習C語言,就必須很是瞭解各個變量如何定義,指針如何操做,內存如何建立銷燬等等。再好比:你學習Java語言,就必須具備面向對象(OO)的基礎,就必須清楚是何時須要封裝,何時須要繼承,何時須要多態,要作項目,怎麼還得懂點SSH。Php的大部分使用者可能根本就沒這麼多講究,有的人喜歡面向過程,那你就用面向過程的方式來寫代碼;有的人喜歡面向對象,那你就用面向對象的方式寫代碼。Php的產生緣於互聯網,目前也是互聯網第一大編程語言。知足需求永遠是第一位的,可維護性暫且能夠放在第2位,咱們的Web應用永遠是β版的,計劃遠沒有變化快。
咱們公司裏有不少phper,我曾經問過他們:「php程序是如何被執行的?」,彷佛多數人都很難說清楚。這其實不奇怪,我曾經拿相似的問題問過Javaer,Javaer的回答也基本如此。有的同窗會問:「研究這樣的問題有沒有實際意義呢?」有!理解系統的底層,有助於寫出高效健壯的代碼,你會更清楚程序的代碼到底該怎麼寫。另外,寫php擴展的同窗更是沒必要說,義不容辭。
要說清楚這個問題,最好的辦法是閱讀一下php的源碼。我閒來無事,粗讀了一遍,願意與各位共享。
關於php的底層工做原理,繞不開webserver,象apache,lighttpd,nginx,iis等。我這裏就以apache開始。如下內容將結合apache的源碼、工做原理和擴展來逐步切入php的解析過程。