前段時間因為項目需要,研究了一下在 Windows 系統下進行 PHP 擴展的開發,對於 PHP 擴展的開發並不是一件容易的事情(話又說回來了,會者不難,難者不會,關鍵是自己不會)。我當時的需求,主要是通過 PHP 擴展來載入 DLL 文件,並調用 DLL 中的導出函數。由於以前有一些 Win32 ...
前段時間因為項目需要,研究了一下在 Windows 系統下進行 PHP 擴展的開發,對於 PHP 擴展的開發並不是一件容易的事情(話又說回來了,會者不難,難者不會,關鍵是自己不會)。我當時的需求,主要是通過 PHP 擴展來載入 DLL 文件,並調用 DLL 中的導出函數。由於以前有一些 Win32 開發的基礎,因此這個需求相對還不算太複雜。
開發 PHP 擴展比較難,我個人認為有兩方面的原因,一方面需要瞭解操作系統相關的開發,畢竟 PHP 擴展不是 .so 文件就是 .dll 文件,另一方面需要瞭解 PHP 本身的底層數據結構。因此,藉此機會就打算學習 PHP 的源碼。不過說來慚愧,由於本身能力有限,所以學習速度比較緩慢。當然了,我是在有參考書的情況下進行學習的,但是速度也並不高。在有參考書的情況下,學習速度也不快,除了本身的能力外,另一方面是數據結構比較多,而且數據之間的關係也比較多,不能很快的對數據結構進行記憶,也不能很好的理清數據結構之間的關係,這是我比較大的障礙。(當然了,我投入的時間也並不多,這個是不好意思說罷了)
由於上面的原因,我覺得一邊看書和看源碼的同時,一邊去整理各個數據結構和數據關係的圖,以方便和加強自己的記憶,從而讓自己更好的去理解。
我看的參考書,在源碼分析前,首先介紹了源碼的目錄結構,我將其整理成了思維導圖,如下圖。
源碼目錄結構相對比較簡單,畢竟就是一個大綱,在不斷學習源碼的過程中,其實可以接著完善,把源碼相應的文件,相應的結構體都維護進去,這樣思維導圖就會逐步的完整,也就相對的有意義了。
在參考書中介紹完源碼目錄結構後,開始介紹 PHP 變數的數據結構。變數的數據結構在書中有詳細的介紹,在詳細介紹之前,只是粗略的進行了整體上的介紹,在這裡,我把它們的數據結構和數據關係也進行了整理,並且把結構體所在的目錄和文件也進行了標註,方便自己在學習源碼的時候方便查找,也方便快速查閱各個數據結構之間的關係,畢竟這些數據結構實在太多了,如下圖。
上面的圖,就是關於 PHP 變數的底層數據結構的圖,圖中的數據結構中欄位並不完整,因為我是在逐步的去完善,在每學習完一部分後就去完善一部分數據結構,當數據結構完善了,圖也就完善了。由於圖過於大,所以這裡沒有辦法顯示清楚,需要詳細圖片的,可以在公眾號中回覆“PHP源碼學習”,即可獲得清晰的大圖。希望可以對大家學習 PHP 的源碼有所幫助。
我的微信公眾號:“碼農UP2U”