超簡單開發自己的php框架一點都不難


(轉)https://blog.csdn.net/qq_33862644/article/details/79344331

寫框架的極簡思路:

接收,打印參數想怎么弄。如 獲取配置文件的方法,根據傳過來的參數 構想

1、一般都是先判斷文件是否存在。存在就該include就include,該new就new。然后做存到屬性中(做緩存)

2、主要是調用流程:都什么需要放到run方法中

詳細思路:

 

1、寫入口文件(2-5步都是寫在入口文件中的)

2、定義常量(就是框架的各層級目錄,省着每次寫一大串)

 

//定義框架根目錄
//定義核心文件目錄路徑
//應用目錄(包含控制器、模型等)
//是否開啟調試

//如果DEBUG為true,將錯誤顯示打開。否則不顯示

3、引入函數庫

 

//加載公共方法

//加載核心文件

4、自動加載

判斷要加載的類是否存在。提示:已經存到屬性中了,其實拿這個屬性判斷。

    存在返回true;

不存在就加載。提示:反斜線替換

    要加載的是文件,就include。注意:這個文件從根目錄下找

    不是就返回false

注意:寫完再建立lib目錄,引入路由類。測試

5、啟動框架

//調用核心文件中的run方法(我的核心文件是core/init.php)

6、路由解析三部曲

6.1、隱藏入口文件

6.2、獲取url的參數

    存在,就解析

        正常情況,先轉數組(方便處理),效驗非正常情況(如:只在url上輸入了控制器,沒有輸入方法,給方法個默認值)

   處里url上的多余參數

            正常情況

            非正常情況,他輸入的是奇數

    不存在給默認值

6.3、返回對應的控制器和方法(其實在6.2中存到屬性中,也算是返回了)

7、加載控制器

在run()時就要加載控制器

將路由解析出來的控制器名,拼成控制器文件的路徑。

判斷控制器文件是否存在,存在就new。不存在就拋出錯誤

注意:這里引入了模塊的概念\app是模塊不是應用,比成熟的框架少一層

8、返回結果

跑起來試一試,其實到這步一個建檔的框架已經完成了,接下來的是擴展框架

9、在控制器中連接模型類

在lib中建立個model類,用於連接數據庫

在控制器中new model類,寫sql操作數據庫

10、中寫視圖類

assign和display方法寫在初始化(core/init.php)類中。注意:先賦值,后包含模板文件

然后控制器繼承該類,進行調用。

11、寫配置類

    新建配置文件類

        寫單個配置文件的方法(提示:既然他倆獲取,傳參是少不了的。2個參數,配置項,配置文件名。打印參數,然后構想)

            //1、判斷配置文件是否存在,存在就include

            //2、判斷配置項是否存在,存在直接給緩存到屬性中

            //3、判斷屬性中有無緩存,有就直接返回屬性中存的

        寫獲取所有配置文件的方法

提示: 新建個配置文件目錄,用來放各種配置文件(如 數據庫的,路由的,日志的....)

測試:配置文件好使不

12、寫日志類

/**
 * 提示:用的是工廠模式的思想:
 * 1、讀取配置文件,獲取當前驅動。在初始化方法中new類
 * 2、在log方法中,調用不同驅動中的log方法
 */

建立日志類

建立驅動目錄

建立日志的配置文件

13、使用composer:編寫json文件,自己的框架上到github上供人家使用

 

第1個類庫報錯的地址:https://github.com/filp/whoops

第2個類庫酷炫的打印變量:"s

"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://pkg.phpcomposer.com/



 

注意:下圖很重要


 

14、使用medoo數據庫類

如果自己封裝pdo可能會有什么想象不到的漏洞,這樣我們就不如直接用現成的類庫加載

http://medoo.lvtao.net/

思路:先將原來繼承的pdo換成該類庫,在封裝模型控制器調用

15、模板引擎類庫

思路:修改display方法,改成類庫的,還有模板布局

 

剩下其余的擴展就因人而異了,想不到的話,可能去參考成熟的框架

這里寫2個封裝好的方法

 

封裝post接收方法(給大家做參考思路)

 

封裝跳轉方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM