初步接觸了php開發以及php擴充的相關內容,發現extending and embeded php這本書很不錯,很多問題也講的非常透徹。這裡把讀到的一些書中的內容和自己的實踐結合起來展示一下,既是給自己留檔,也是拋磚引玉,期待php大牛的指導。
extending and embeded php這本書還有一個中文版,有些東西新一些,也可以參考下:
http://www.walu.cc/phpbook/preface.md
這本書主要講兩個方面:
如何通過添加函數、類、資源和流的方式來擴充php
- 如何把php語言嵌入到其他應用中去那麼為什麼需要php擴充呢?:
- 串連額外的庫,並以api的形式提供給使用者空間的指令碼。比如被封裝好的mysql
-
- 是在第三方的庫和php的核心之間提供一種擴充,因此php被稱為是膠水語言
- 進行特殊的內部操作,比如聲明超級變數,使用者空間因為安全原因是有限制的。比如php的advanced php debugger 和runkit主要就是幹這個的
- 速度原因:令牌化、編譯、運行,Opcode可以縮減前兩步,但是執行這一步的話還是變成C code比較好。
- 在不暴露出源碼的情況下提供功能
中給出了php的總體結構:
其中各部分模組的功能如下:
SAPI:是跟web server的介面層PHP Core:對於核心事件的串連層,處理類似於檔案處理、錯誤處理這類操作Zend Engine:把指令碼編譯成機器語言,執行bytecode,讀入寫出使用者空間變數,控製程序流,解析擴充。TSRM:thread safe resource management:使得一個單個的php執行個體具有能夠同時處理很多獨立的請求的能力這本書分成了三個部分,第一個部分是對php的重新介紹,主要敘述了php的解譯器如何黏合在一起。第二個部分則主要在講php的擴充,所涉及的方面如下:
- PHP API 一些php內部的函數和宏
- 如何把php指令碼轉換成c code:每個php的指令碼的背後都牽涉到了c語言的相應處理,這種對應關係對擴充的開發十分有用
- 執行那些使用者空間不可能的操作:很多時候需要執行一些類似於超級變數這種在使用者態無法完成的動作,這個時候需要利用擴充進行相應的處理。而第三個部分則是敘述如何把php嵌入到相應的應用中去: