首頁  >  文章  >  後端開發  >  超簡單開發自己的php框架一點都不難!

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

卡哇伊
卡哇伊轉載
2020-07-16 17:00:343742瀏覽

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

出發點:我個人理解 自己開發框架也是鍛鍊原生的一種手段。寫完之後看別的框架也方便多了。如果你遇到一個沒有文件或文檔極少的框架,可以跟著這個思路摸索著補充。或乾脆拿著原生上來就是乾,我剛接觸yii2的時候就是這樣,都沒來的及看文檔就開工了,基本純原生寫的,就用了個yii2的csrf和雙語....

寫框架的極簡思路

#接收,印出參數想怎麼弄。如 取得設定檔的方法,根據傳過來的參數 構想

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接收方法(给大家做参考思路)

封装跳转方法

更多教程:《php教程

以上是超簡單開發自己的php框架一點都不難!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除