文章來自:php自學中心
工作這么多年,也面試過很多PHP工程師,我發現很多PHP工程師只停留在使用框架的層面,然而對框架底層根本沒有深入去了解,那么這就會給自己的職業生涯帶來一定的瓶頸,當遇到問題的時候你就無從下手,不知道如何去排查與調試,更別說去擴展核心庫,相反,如果大家對框架底層源碼有一定的了解,這樣的問題就變得簡單很多, 學習框架貴在堅持,學習某一項語言都是需要耐心,這會讓你對PHP全局以及框架底層有質的飛躍。
總而言之:搞技術的,既然入坑了,就得知道一個理念:知其然還得知其所以然,停留在會用階段,職業生涯肯定走的不遠!因為你沒有深入。。。
那么有小伙伴就開始質疑了,那我要如何選擇一門框架呢?就拿PHP來說吧,PHP有N多框架,比如YII ThinkPHP、laravel等等,這幾個都有自己的優勢和特點,在國內ThinkPHP確實用的很多,這里其實我想表達的是:不管你學習哪個框架并不重要,我們需要選擇一個然后安心的學好它的底層,學習需要堅持,耐心+時間,比如你學會了一個框架之后,那么其他框架你自學下很快就會上手,因為框架的核心思想基本是相通的,它們的基礎都是PHP,不要想得太復雜。那么現在就就拿ThinkPHP來舉例,我們如何學習他的底層呢?
堅持,耐心,時間
我們可以從以下幾個方向入手:
一、 框架中是如何加載這些類庫的?
學習框架底層如何加載類庫這一步是必須的,因為我們要知道框架是如何加載不同目錄下的不同文件,如果是框架通過composer安裝的類庫,同樣我們都要弄清楚是如何被加載到框架的,那我們就要從thinkLoader.php文件入手了。接下來如何做?所以學習框架底層一定要帶著問題和思考的態度去學習,這樣成長肯定很快。
比如我想自己創建一個自定義leifeng目錄 也想把它被加載到框架中,當你了解了如何加載文件的,也試試加載自己定義的文件吧。這個時候恭喜你底層第一步你搞懂了。
二、設計模式學習(工廠模式、單例模式、注冊樹模式、門面模式等)
你想提升自己php的技能,那你就必須學習一下設計模式,雖然這個經常在面試中遇到,但是希望你不僅僅只是為了應付面試,而是要真正的弄清楚什么是設計模式
三、反射機制學習
什么是反射呢?
在PHP的面向對象編程中的對象,它被系統賦予自省的能力,而這個自省的過程,我們把它叫做反射。
我們對反射的直觀理解可以是,根據達到地,找到出發地和來源這么一個過程,通俗來講就是,我給你一個光禿禿的對象,完事你可以根據這個對象,知道它所屬的類,擁有哪些方法。
在PHP中,反射是指在PHP運行狀態中,擴展分析PHP程序,導出或者提取出關于類、屬性、方法、參數等的詳細信息,包括注釋。這種動態獲取信息以及動態調用對象方法的功能,被稱為反射API。
這里自己找個例子加強一下。
四、依賴注入 控制反轉
經常聽過吧,是否有去了解,敲敲代碼實現一下。簡單了解一下
(1)依賴注入是從應用程序的角度在描述,可以把依賴注入,即:應用程序依賴容器創建并注入它所需要的外部資源;
(2)而控制反轉是從容器的角度在描述,即:容器控制應用程序,由容器反向的向應用程序注入應用程序所需要的外部資源.
五、研究TP框架中的容器、門面Facade think/Container thinkFacade
六、路由
以上2-6點的具體分析 可以直接通過index.php入口文件去跟進,看看框架里面走了哪些流程,如何實現,用到哪些工具欄,環境變量,如何配置等等。
說到框架的路由是如何做的,通過跟進,我們會在App類中 在routeInit路由初始化這個方法,它是路由的核心,具體基礎路由類庫是如何引入的。你都能看的明白的
七、底層控制器、模型、視圖的基礎類庫分析
八、其他一些工具類的分析
比如: 異常處理、緩存等核心類庫分析。
以上這些基本上涵蓋了框架的核心內容,代碼本來就是很枯燥的一個東西,在研究框架底層這個過程更是枯燥和痛苦的,但是我們需要堅持【堅持下來就能改變世界了】閱讀框架代碼不是看一遍就完事了,看不懂,我們就多看幾遍,并且在看的過程中我們還需要做點如下幾點:
1、在你有疑問的地方打上斷點,輸出相關的內容出來 看看他到底返回什么內容,因為這樣更加直觀,便于你真正意義上理解
2、我們需要思考它為什么要這樣做? 我這樣做可以嗎? 能不能變通、或者有沒有更好的方法? 因為帶著問題和思考的態度去學習 更加有利于你的個人成長
3、在研究源碼的時候有不懂得地方肯定很正常的,這個時候一定要記住多利用百度或者谷歌
4、有個講師提醒我,一定要多畫圖, 因為您去研究源碼然后還能通過圖的方式畫出來 這更加有基于您學習以及深入理解,它真的能起到事半功倍的作用!
比如下面的圖解:
類自動加載的時候會用到的一些屬性,并且類的自動加載和他們息息相關
類自動加載的時候會用到的一些屬性
底層容器的一些屬性內容
底層容器的一些屬性內容
instances屬性就是最終的容器核心
instances屬性就是最終的容器核心
框架底層配置文件走過的流程圖
框架底層配置文件走過的流程圖
在這里我主要是想表達我們一定要邊看底層源碼,邊通過圖例記錄下來,深入理解,對你學習很有幫助的。寫到這里,感謝閱讀!