標籤:

想要開發自己的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參數的不同來運行不同的函數。

&

可以看懂上面的意思吧。。

就是通過 you_host_name?fn=hello 來運行hello的函數。

這樣,我們就可以寫兩個功能

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參數來運行函數
}

我們在index.php同級目錄下建立group文件夾,然後把一堆的女友,兄弟,七姑八姨的文件挪過去。

然後通過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 IoC

4 資料庫封裝

5 cache封裝

6 模版解析 文件cache

7 安全 xss sql注入

8 http 操作

9 圖片操作

10 等等 很多

每一塊都會展開很多的知識點

最後:自己寫的框架

fantiq/phpframework · GitHub


正在做這個事情,不過比較菜。有興趣我們可以相互學習(*^__^*)


漲姿勢了


推薦閱讀:

一名Infrastructure Engineer需要掌握哪些技術?
作為WEB前端開發,大家都知道那些方便的js擴展庫呢?
MVC到底是設計模式還是一種框架?
有哪些優秀的 C/C++ 開源代碼框架?這些框架的設計思路是怎樣的?

TAG:PHP | 框架 |