模仿KOA,用php來寫一個極簡的開發框架
nodejs的koa可以說是非常受歡迎的,特別是其「洋蔥模型」應該用過的人印象都比較深,下面就嘗試用php來實現一個。
註:本文是PHPec框架的最原始思路版本。PHPec是在此基礎上完善編寫出來的一個極簡的輕量級開發框架,除了提供中間件調用模式外,同時提供了常見的自動路由功能,目前 已在github上發布了最初版本。歡迎感興趣的去了解和提出建議,也歡迎star. 地址: https://github.com/tim1020/PHPec
期望用法 先來看看我要怎麼用「這個框架」?
基本上跟koa類似,先new一個app對象,使用use方法添加中間件,支持閉包或外部文件。
$ctx支持注入所需的各種參數,方便各中間件共用。
完整代碼
沒錯,這就是全部的代碼。
代碼講解 use方法 use可以加入閉包或外部文件,且php5不支持use作為方法名,這裡用 來實現重載,當調用use時由 來調用私有的 方法。
對傳進來的參數作判斷,如果是字元串,表示外部載入,則去判斷文件和處理函數是否存在和有效,然後將處理函數加到中間件隊列。
這裡面如果use()傳遞空參數,表示忽略後面的中間件。
run方法 添加完中間件後,執行 方法運行,來看看是怎麼執行的:
調用私有的_gen來生成一個生成器,該生成器可以迭代返回隊列中的中間件處理函數。 調用next方法執行下一個中間件(這裡即第一個入口)
2.1 調用生成器的current方法獲得當前的處理函數
2.2 執行該函數(傳遞$this作為參數,即$ctx),並調用生成器的next方法後移到下一個處理函數
直到生成器沒有返回時結束。 中間件中需調用 將控制權交到下一個中間件,從而迭代完所有的中間件。
和 方法 提供了 t和 方法,是方便在中間件中使用$ctx直接設置和訪問未經定義的值。如:
That is all
更多分享,敬請關注
本文來源網路,侵立刪!
TAG:PHP技術大全 |