出發點:我個人理解 自己開發框架也是鍛鍊原生的一種手段。寫完之後看別的框架也方便多了。如果你遇到一個沒有文件或文檔極少的框架,可以跟著這個思路摸索著補充。或乾脆拿著原生上來就是乾,我剛接觸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中文網其他相關文章!