[手摸手帶你建立php現代化框架] 教程終於寫完了

lyxxxh發表於2020-09-11

教程地址

手摸手帶你建立php現代化框架

0-1 寫出來的。

剛寫完的文件,有什麼問題,歡迎指正。

(釋出時間不對勁? 沒錯 通宵了 先打會遊戲 等下再睡覺)
[手摸手帶你建立php現代化框架] 教程寫完了

原始碼

教程原始碼:php_frame (giteee)
原型原始碼: php_frame (github)

原型原始碼: 先寫好框架,就是 原型原始碼, 才開始寫此教程。
教程原始碼: 按此教程步驟走下去,會最終變成教程原始碼,大部分都是複製 原型原始碼 的。

設計方向

閉門造輪子

聽到很多,不要建立重複輪子了!

最後終究還是要 學習框架底層 = 學習輪子,這也此框架目的之一。

閉門造輪 成為這個框架最大的特色。

所以此教程不是 手摸手帶你組裝php現代化框架, 而是 手摸手帶你建立php現代化框架

不完善全部程式碼

指不是框架執行必要的程式碼, 本教程不會寫!

讀者自行完善, 這也可以加深讀者的印象。

比如路由, get``post寫好了,
https://i.iter01.com/images/96cf1e3ba7e1d98d0e3581d0ca467c0c8ceb66121fe3c55a9c0a2169656aba10.png

put``post``delete 讓讀者去完善。

最少程式碼

我個人較為討厭長程式碼,每個字都需要去解讀。

因為 不完善全部程式碼 , 所以程式碼量才少。

如果全部都完善了,那為什麼不去看 輪子 原始碼?

因為程式碼量多唄 !

目錄結構

+---app
|   |   helpers.php // 函式
|   +---controller
|   |       UserController.php // 示例控制器
|   +---exceptions
|   |       ErrorMessageException.php // 錯誤訊息返回
|   |       HandleExceptions.php // 繼承core/HandleExceptions
|   +---middleware
|   |       ApiMiddleWare.php
|   |       ControllerMiddleWare.php
|   |       IsAuthMiddleWare.php 
|   |       WebMiddleWare.php // web.php載入的中介軟體
|   \---models
|           User.php // 示例模型
+---config
|       database.php // 資料庫配置
|       log.php // 日誌配置
|       view.php // 檢視配置
+---core
|   |   Config.php  // 配置
|   |   Controller.php      // 基礎控制器
|   |   HandleExceptions.php    // 異常&錯誤 託管處理
|   |   PipleLine.php   // 管道
|   |   Response.php    // 響應
|   |   RouteCollection.php // 路由
|   |   SwooleContext.php // 協程上下文管理
|   |   TestCase.php // 基礎測試檔案
|   +---database
|   |   |   Database.php 
|   |   +---connection
|   |   |       Connection.php
|   |   |       ConnectionInterface.php
|   |   |       MysqlConnection.php // mysql連結
|   |   |       SqlServerConnection.php 
|   |   +---model
|   |   |       Builder.php // 模型構造器
|   |   |       Model.php // 基礎模型
|   |   \---query
|   |           Grammar.php
|   |           MysqlGrammar.php // 編譯成sql語句
|   |           QueryBuilder.php // 查詢構造器
|   +---log
|   |   |   Logger.php // 日誌管理
|   |   \---driver // 不同型別日誌實現
|   |           DailyLogger.php
|   |           StackLogger.php
|   |
|   +---request
|   |       PhpRequest.php  // 請求
|   |       RequestInterface.php 
|   \---view
|           Blade.php       // laravel模板引擎
|           Thinkphp.php    // tp模板引擎
|           View.php    // 檢視介面卡
|           ViewInterface.php 
+---public
|       index.php // 單一入口檔案
+---routes
|       api.php 
|       web.php // 大部分功能可以在這裡執行
+---storage
|       daily.log       // 框架日誌 按日期型別 
|       php_frame.log // 框架日誌 
|       swoole.pid // swoole的程式pid
+---tests
|       ExampleTest.php // 測試示例檔案
+---phpunit.xml // phpunit的配置
+---app.php     // 框架要經過這個載入
+---swoole.php     // swoole的http伺服器

文章目錄

基礎篇

  • 第一步 建立框架目錄
  • 引入composer自動載入
  • composer自動載入 (解釋篇)
  • 新增函式檔案helpers.php
  • 建立容器 (反射解析依賴 註冊樹模式)
  • 關於psr規範解釋
  • 關於”容器” “契約” “依賴注入” (解釋篇)
  • 初始化請求(Request)
  • 響應 (Response)
  • 路由一 (路由組實現)
  • 路由二 (加入中介軟體)
  • 配置資訊 (類似laravel)
  • 資料庫連線 (多例模式)
  • 查詢構造器 (query builder)

mvc實現

  • M 模型實現 (資料對映 + 原型 模式)
  • C 控制器實現 + 控制器中介軟體
  • V 檢視實現 (Laravel Blade 引擎)
  • V 檢視切換成 ThinkPhp 模板 引擎)

其他輪子

  • 日誌
  • 自定義異常 (異常託管)
  • 單元測試 (phpunit)
  • 替換成swoole的http伺服器
  • 協程上下文解決request問題
  • qps測試
本作品採用《CC 協議》,轉載必須註明作者和本文連結
專心學習不瞎搞

相關文章