<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [toc] 出發點:我個人理解 自己開發框架也是鍛煉原生的一種手段。寫完之后看別的框架也方便多了。如果你遇到一個沒有文檔或文檔極少的框架,可以跟著這個思路摸索著補充。或干脆拿著原生上來就是干,我剛接觸yii2的時候就是這樣,都沒來的及看文檔就開工了,基本純原生寫的,就用了個yii2的csrf和雙語言... >[info]源碼下載地址:https://github.com/yxgg/-frame ## :-: **寫框架的 極簡思路** 接收,打印參數想怎么弄。如 獲取配置文件的方法,根據傳過來的參數 構想 1、一般都是先判斷文件是否存在。存在就該include就include,該new就new。然后存到對象的屬性中(做緩存) 2、主要是調用流程:都什么需要放到run方法中 ## :-: **詳細思路** ![](https://box.kancloud.cn/dd777d133bbdf1d1747f6fe0a3d54f1d_484x223.png) ### :-: **1、寫入口文件** - 第2步-第5步都是寫在入口文件中的 ### :-: **2、定義常量** - 就是框架的各層級目錄,省著每次寫一大串 ``` //定義框架根目錄 //定義核心文件目錄路徑 //應用目錄(包含控制器、模型等) //是否開啟調試 //如果DEBUG為true,將錯誤 ``` ### :-: **3、引入函數庫** ``` //加載公共方法 //加載核心文件 ``` ### :-: **4、自動加載** ~~~ 判斷要加載的類是否存在。提示:要加載的類已經存到屬性中了,其實拿這個屬性判斷。 存在返回true; 不存在就加載。提示:加載時反斜線替換 要加載的是文件,就include。注意:這個文件從根目錄下找 要加載的不是文件,就返回false ~~~ >[warning]注意:寫完再建立lib目錄,引入路由類。測試 ### :-: **5、啟動框架** ``` //調用核心文件中的run方法(我的核心文件是core/init.php) ``` ### :-: **6、路由解析三部曲(分3個步驟)** 6.1、隱藏入口文件 6.2、獲取url的參數 ~~~ 存在,就解析 正常情況,先轉數組(方便處理),效驗非正常情況(如:只在url上輸入了控制器,沒有輸入方法,給方法個默認值) 處里url上的多余參數 正常情況 非正常情況,他輸入的是奇數 非正常情況下,返回錯誤,寫入日志 等 不存在給默認值。如 跳轉到首頁 ~~~ 6.3、返回對應的控制器和方法(其實在6.2中存到屬性中,也算是返回了) ### :-: **7、加載控制器** - 在run()時就要加載控制器 - 將路由解析出來的控制器名,拼成控制器文件的路徑。 - 判斷控制器文件是否存在,存在就new。不存在就拋出錯誤 >[info]這里引入了模塊的概念\\app是模塊不是應用,比成熟的框架少一層 ### :-: **8、返回結果** - 跑起來試一試,其實到這步一個建檔的框架已經完成了。接下來的是擴展框架 ### :-: **9、在控制器中連接模型類** - 在lib中建立個model類,用于連接數據庫 - 在控制器中new model類,寫sql操作數據庫 ### :-: **10、中寫視圖類** - assign和display方法寫在初始化(core/init.php)類中。 >[info]先賦值,后包含模板文件 - 然后控制器繼承該類,進行調用。 ### :-: **11、寫配置類** 新建配置文件類 寫單個配置文件的方法(提示:既然他倆獲取,傳參是少不了的。2個參數,配置項,配置文件名。打印參數,然后構想) //1、判斷配置文件是否存在,存在就include //2、判斷配置項是否存在,存在直接給緩存到屬性中 //3、判斷屬性中有無緩存,有就直接返回屬性中存的 寫獲取所有配置文件的方法 >[info]新建個配置文件目錄,用來放各種配置文件(如 數據庫的,路由的,日志的....) 測試:配置文件好使不 ### :-: **12、寫日志類** - 提示:用的是工廠模式的思想: - 讀取配置文件,獲取當前驅動。在初始化方法中new類 - 在log方法中,調用不同驅動中的log方法 ``` //建立日志類 //建立驅動目錄 //建立日志的配置文件 ``` ### :-: **13、使用composer** >[info]在自己的框架上,編寫json文件,這樣放到github上之后,別人就可以通過name名“xgkj”來使用composer下載了。 ![](https://box.kancloud.cn/4e8b1359429120c24ef52d8a94d08676_497x184.png) - 第1個"報錯"類庫的下載地址:https://github.com/filp/whoops - 第2個“酷炫打印變量”類庫的下載地址: ``` "symfony/var-dumper":"*" #更帥氣變量輸出的效果 "ymfony/var-umper":"*" #更帥氣變量輸出的效果 ``` - 第3個“數據庫”類庫的下載地址:http://medoo.lvtao.net/1.2/doc.php - 第4個“模板引擎”類庫的下載地址:https://twig.symfony.com/doc/2.x/intro.html#installation ![](https://box.kancloud.cn/8af76a132d30e20395756f575bc52970_496x252.png) 鏡像網址:[https://pkg.phpcomposer.com/](https://pkg.phpcomposer.com/) ![](https://box.kancloud.cn/9b4d423430c7b5581a60225673d0c529_473x335.png) ![](https://box.kancloud.cn/23a42285cb904579f61fe0aaf6f6cb94_492x268.png) 注意:下圖很重要 ![](https://box.kancloud.cn/ed4992ae1be30a207027a02356270d78_496x172.png) ![](https://box.kancloud.cn/ac9fa73224efc028ef1e198b9c877b7d_484x288.png) ### :-: **14、使用medoo數據庫類** - 如果自己封裝pdo可能會有什么想象不到的漏洞,這樣我們就不如直接用現成的類庫加載 http://medoo.lvtao.net/ ``` //先將原來繼承的pdo換成該類庫 //在封裝模型控制器調用 ``` ### :-: **15、模板引擎類庫** ``` //修改display方法,改成類庫的,還有模板布局 ``` ### :-: **16、其余擴展** - 剩下其余的擴展就因人而異了,想不到的話,可能去參考成熟的框架 - 這里寫2個封裝好的方法 - 封裝post接收方法(給大家做參考思路) ![](https://box.kancloud.cn/d9852a7d2858fdf61687993d62ffdfe1_495x51.png) ![](https://box.kancloud.cn/32dd9c4550a24904becd88c1c9a5c92a_496x370.png) - 封裝跳轉方法 ![](https://box.kancloud.cn/45c30ab07af57a1e91efa709f40bb17d_427x105.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看