想要開發自己的PHP框架需要那些知識儲備?
很多人當聽到別人要開發框架的時候第一想法就是,又重複造輪子。
其實造輪子的過程是一個快速積累知識的過程,能較快的發現自己的不足,以及學到一些自己未發現的知識點。所以建議在有一定PHP基礎的情況下,都去嘗試完成一個五臟俱全的基本框架吧。那麼下面分享一下我之前造輪子的過程吧:
1. 嘗試試用一個以上的框架,看完一遍使用文檔,目的在於了解它都有哪些功能,發現他的一些比較好的用法設計;
2. 在看文檔的同時並行的思考這一部分的實現原理,如果想不明白則記下來或者上Github去看源碼(當然在不熟悉代碼結構的情況下可能很難找,所以我建議還是先記下來);
3. 看它的項目結構,同時思考這個結構的意義,比如現在大部分框架都把入口文件與靜態資源單獨放到public目錄里與其它目錄分開的原因是什麼;4. 嘗試看一遍源碼的運行流程,從入口到輸出,以及錯誤處理,模板引擎,配置等多個點了解一下(如果基礎允許的話,在這過程中解決上面記下來的疑點吧);5. 開始自己實現吧,先寫一個大概的功能列表,把你要實現的點寫出來;6. 然後思考如果組織代碼結構,在沒有太多實踐經驗的情況下就按你最熟悉的方式組織吧(先實現再優化);7. 先跑通基本的hello world!;8. 一點點加功能吧;9. 發現不足,改進它;這裡在加功能的時候,盡量自己實現所有的能實現的組件,比如文件上傳,錯誤處理等等,畢竟目的是實習知識。
那麼這過程其實走下來對於基礎稍差的人來說可能會特別不順利,那麼沒關係,遇到哪一個點卡住,先解決你對這個點的問題,快速補充知識再回來繼續。總結一些在造框架過程中通常會用到的一些點吧(以下排列沒有先後順序):
1. MVC
2. 自動載入: PHP: 自動載入類;3. 錯誤處理:http://php.net/manual/zh/book.errorfunc.php;4. PHP標準庫 (SPL)PHP: SPL - Manual;5. 輸出緩衝控制: PHP: 輸出控制;6. PHP 選項/信息:PHP:PHP 選項/信息;7. 資料庫抽象層:PHP: 資料庫抽象層;8. session拓展:PHP: Session 擴展;9. 反射:http://php.net/manual/zh/book.reflection.php;10. 類和對象:PHP: 類/對象;
11. 圖像處理和 GD:PHP: GD - Manual;12. 郵件相關的SMTP;13. 文件系統:PHP: Filesystem;14. 預定義變數:PHP: 預定義變數;15. 字元串處理:PHP: 字元串 - Manual;15. 正則表達式: http://php.net/manual/en/book.pcre.php;基本的可能上面這些也足夠了,雖然上面給的每一個鏈接都有很多內容,但是掌握常用的就好,可以結合搜索引擎去了解。
如果你想給框架加一些更巧妙的,或者更豐富的功能的話,這裡還有一些知識點:
1. 常見的設計模式:工廠、單例,外觀、觀察者等;
2. 迭代器等預定義介面:PHP: 預定義介面;
3. 資料庫拓展:PHP: 資料庫擴展;4. 國際化與字元編碼支持 PHP: 國際化與字元編碼支持;5. 常用的緩存,Redis, Memcache,Apc等;6. 隊列服務如ActiveMQ,Beanstalkd等;7. 多資料庫支持如Mongo;8. 事件與鉤子;另外還有一種創建框架的方式,不過這裡用「創建」已經不太合適了,叫組合框架吧,那就是使用Composer基於開源組件拼裝一個屬於自己的框架。當然這裡不建議新手這麼干,這可能會讓你在很多基礎的東西上得不到鍛煉。如果個人技術能力已經比較成熟了,目的在於快速開發項目的時候,用它絕對是利器。
最後推薦一些參考框架:
1. Slim Framework - 微框架,一個框架基本功能都滿足了,很適合用於學習;
2. Silex - 微框架,基於Symfony2組件;
3. CodeIgniter - 結構很清晰的PHP框架;另外這裡還有一些教程可以參考,不過建議先自己嘗試:
1. Write your own PHP MVC Framework (Part 1)
2. 使用PHP搭建自己的MVC框架--- 2015.02.28補充---看了樓下各位的回答,發現大家都跑題了,題意是「需要那些知識儲備?」 而不是「怎樣完成一個框架」,完成框架的方法N種,而且按樓下某些的答案,完成了也學不到啥,甚至為啥這樣就可以作為一個框架運行了,中間的原理都不懂,所以請慎重回答以免誤導別人。其實很簡單的東西。
首先確定你掌握了以下知識:1.通過url傳遞和接受參數處理2.知道include的含義
3.會echo和定義函數。OK,開始首先,我們先來寫一個php文件index.php,讓我們可以通過GET參數的不同來運行不同的函數。&
可以看懂上面的意思吧。。
function home_page()
{
echo "&我的主頁&";
echo "&我的信息&";
echo "&主頁&
}
function my_info()
{
echo "&我的主頁&";
echo "&我的信息&";
echo "&我的信息&
}
上面就實現了一個簡單的自我介紹網站的大體結構。當然,你可以整理一下界面,然後加一些my_family,my_girlfriend,這樣的N多函數。
如果你有10個兄弟,可能會寫10個如my_brother_one,my_brother_two....這樣的函數。
如果你有10個女友,可能會寫10個如my_girlfriend_one,my_girlfriend_two....這樣的函數。這個php頁面就會很長。。另外把10個兄弟和10個女友混雜在一起可能會不好。所以我們把他們拆開到不同的php文件如my_girlfriend.php my_brother.php 兩個文件,然後在主文件index.php就是include「my_girlfriend.php」;
include "my_borther.php";
就可以了。
不過你的問題會隨著需求繼續增多,比如想要加入同學,加入姐姐,加入七姑八姨,加入食堂的美女....就會出現N多include的情況,並且每次加入新的人物分類都會去修改這個include列表我們稍微修改一下index.php中的run_it函數function run_it()
{
$group=$_GET["g"];
include "/group/".$group.".php";//通過http參數g來確定include哪一個php文件
$function_name=$_GET["fn"];
$function_name();//通過fn參數來運行函數
}
然後通過you_host_name?g=my_grilfriendfn=my_girlfriend_one 來訪問第一個女友。能否理解?
這樣我們就通過echo和定義函數構建了一個簡單的路由載入器。===================未完待續......===================PHP框架,MVC,最近在看這個,覺得對MVC的理解有點幫助MVC架構模式分析與設計可以看一下,講解也挺細緻
起手先支持psr-4多用拋出異常
先用nginx將所有請求轉發到index.php
http可以用psr-7的實現直接封裝路由大概是正則+反射model的話就用pdo封裝view層的話我還不知道怎麼寫同求學會composer ,看這個系列。利用 Composer 一步一步構建自己的 PHP 框架https://phphub.org/topics/159
其實前面的人已經說的很清楚了,
你這想法我曾經也經歷過,簡單的說,使用知名的產品,一般都是忙於實現,缺乏宏觀意識,由此說來開發一個框架也是很正常的。
我當時也開發了一個,其實我考慮的沒樓上說的這麼多,
就是簡單的路由分發,mvc分層。基本的架子搭起來後,逐步完善。
在工作中,碰到只需要自己一個人來完成的一次性小項目,就可以試試自己的框架了。
建議樓主找幾個簡單的框架看看,個人推薦codergniter,算是結構最清晰的框架了。
別太早深入細節,類庫、插件都是浮雲,框架框架,合理的架構規範最重要。要讓大象跳舞,在功能強大的前提下,盡量的輕,別動不動引用一堆類,一堆配置文件。很多框架只能說是個類庫
可以參考:https://github.com/2654709623/Z-PHP的實現
我最近剛完成我的第二個開源框架 MixPHP,根據我的開發路線給你一些參考,首先要設計一個架構,就是整個框架的 「思想」,當然我相信誰都不可能憑空就能發明一個很牛叉的思想,大都是在巨人的肩膀上做創新,所以你可以去參考現有的巨人們的思想。
第一步:你要實現這些,框架才能運轉起來
* [路由]
* [請求]
* [控制器]
* [視圖]
* [響應]
* [模型]
第二步:與 Web 相關的功能組件
* [Session]
* [Cookie]
* [文件上傳]
* [圖片處理]
* [分頁]
* [驗證碼]
* [多語言]
* [資料庫]
* [日誌]
* [配置]
———————— 你可以參考下我這個 ————————
MixPHP ----- 內置 Server 基於 Swoole 的常駐內存型 PHP 框架
mixstart/mixphp
PHP框架規範參差不齊,想學習的話可以先從比較簡單的框架源碼讀起,像CodeIniter。
但是CI有一個缺點就是不遵從PSR規範,這意味著與Composer這種類庫工具有點不太合群(當然如果想強行使用還是可以的)。
但是我覺得Composer應該會把PHP帶上一個新的高度,讓PHP工程化、標準化,所以我推薦使用Composer作為框架的依賴管理工具。
最近非常流行的Laravel也是基於Composer進行包管理。可以深入學習一下裡面源碼,裡面設計到的思想比如Ioc等都是十分前衛的,和Java的Spring的設計有異曲同工之妙,不過可能對學習者的要求會比較高。
基本的MVC思想:
Controller
Model
View
可以按照上面的順序想好整個框架基本結構,再編寫一些基本的類庫方法等。
最近本人也編寫了一個輕量級的PHP框架,放在了Github上,是基於Composer進行編寫的,可以互相學習一下:
LongPHP
2017.10.23更新-------------------------------------------
最近新編寫了一個面向API的輕量級PHP框架,歡迎交流學習。
YanPHP
主要實現路由控制,$_SERVER裡面很多屬性要用,要寫很多正則,一個簡單的路由框架大概一個文件幾十行就可以實現,可以參考一下單文件框架arphp
之前看幫助等,算是學者用laravel 5.0開發了一個小應用,但是還是覺得缺乏自信,感覺對這個框架還是缺乏認識和了解,我是學java的,但是看到這個框架這麼火就試了下.
問題:
喜歡PHP,想學精通PHP和laravel,這樣的話就必須要從基礎學起,自己寫個框架才可以的嗎?如果你沒寫過框架,討論各個框架的內容都沒有可討論性
最終寫了一個框架出來,框架涉及到的內容很多,個人覺得自己寫一個框架對你自己的邏輯思維,開發架構以及這門語言都有質的提升。自己寫的過程中做了兩版,參照了ci tp yii 三個框架的源代碼(僅僅是看他們的思路,去粗取精),整個做下來博客寫了將近20多篇正題:
需要知識1 路由解析2 路由分配3 IoC4 資料庫封裝5 cache封裝6 模版解析 文件cache7 安全 xss sql注入8 http 操作9 圖片操作10 等等 很多每一塊都會展開很多的知識點最後:自己寫的框架fantiq/phpframework · GitHub正在做這個事情,不過比較菜。有興趣我們可以相互學習(*^__^*)
漲姿勢了
推薦閱讀:
※一名Infrastructure Engineer需要掌握哪些技術?
※作為WEB前端開發,大家都知道那些方便的js擴展庫呢?
※MVC到底是設計模式還是一種框架?
※有哪些優秀的 C/C++ 開源代碼框架?這些框架的設計思路是怎樣的?