目錄
回复内容:
首頁 後端開發 php教程 想要开发自己的PHP框架需要那些知识储备?

想要开发自己的PHP框架需要那些知识储备?

Jun 17, 2016 am 08:30 AM

回复内容:

很多人当听到别人要开发框架的时候第一想法就是,又重复造轮子。
其实造轮子的过程是一个快速积累知识的过程,能较快的发现自己的不足,以及学到一些自己未发现的知识点。所以建议在有一定PHP基础的情况下,都去尝试完成一个五脏俱全的基本框架吧。

那么下面分享一下我之前造轮子的过程吧:

1. 尝试试用一个以上的框架,看完一遍使用文档,目的在于了解它都有哪些功能,发现他的一些比较好的用法设计;
2. 在看文档的同时并行的思考这一部分的实现原理,如果想不明白则记下来或者上Github去看源码(当然在不熟悉代码结构的情况下可能很难找,所以我建议还是先记下来);
3. 看它的项目结构,同时思考这个结构的意义,比如现在大部分框架都把入口文件与静态资源单独放到public目录里与其它目录分开的原因是什么;
4. 尝试看一遍源码的运行流程,从入口到输出,以及错误处理,模板引擎,配置等多个点了解一下(如果基础允许的话,在这过程中解决上面记下来的疑点吧);
5. 开始自己实现吧,先写一个大概的功能列表,把你要实现的点写出来;
6. 然后思考如果组织代码结构,在没有太多实践经验的情况下就按你最熟悉的方式组织吧(先实现再优化);
7. 先跑通基本的hello world!;
8. 一点点加功能吧;
9. 发现不足,改进它;

这里在加功能的时候,尽量自己实现所有的能实现的组件,比如文件上传,错误处理等等,毕竟目的是实习知识。
那么这过程其实走下来对于基础稍差的人来说可能会特别不顺利,那么没关系,遇到哪一个点卡住,先解决你对这个点的问题,快速补充知识再回来继续。

总结一些在造框架过程中通常会用到的一些点吧(以下排列没有先后顺序):

1. MVC
2. 自动加载: PHP: 自动加载类;
3. 错误处理:php.net/manual/zh/book.;
4. PHP标准库 (SPL)PHP: SPL - Manual;
5. 输出缓冲控制: PHP: 输出控制;
6. PHP 选项/信息:PHP:PHP 选项/信息;
7. 数据库抽象层:PHP: 数据库抽象层;
8. session拓展:PHP: Session 扩展;
9. 反射:php.net/manual/zh/book.;
10. 类和对象:PHP: 类/对象;
11. 图像处理和 GD:PHP: GD - Manual;
12. 邮件相关的SMTP;
13. 文件系统:PHP: Filesystem;
14. 预定义变量:PHP: 预定义变量;
15. 字符串处理:PHP: 字符串 - Manual;
15. 正则表达式: php.net/manual/en/book.;

基本的可能上面这些也足够了,虽然上面给的每一个链接都有很多内容,但是掌握常用的就好,可以结合搜索引擎去了解。

如果你想给框架加一些更巧妙的,或者更丰富的功能的话,这里还有一些知识点:

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参数的不同来运行不同的函数。
<?php
function run_it()
{
  $function_name=$_GET['fn'];
  $function_name();//通过fn参数来运行函数
}
run_it();
登入後複製
学会composer ,看这个系列。
利用 Composer 一步一步构建自己的 PHP 框架phphub.org/topics/159

其实前面的人已经说的很清楚了,

你这想法我曾经也经历过,简单的说,使用知名的产品,一般都是忙于实现,缺乏宏观意识,由此说来开发一个框架也是很正常的。

我当时也开发了一个,其实我考虑的没楼上说的这么多,

就是简单的路由分发,mvc分层。基本的架子搭起来后,逐步完善。

在工作中,碰到只需要自己一个人来完成的一次性小项目,就可以试试自己的框架了。

建议楼主找几个简单的框架看看,个人推荐codergniter,算是结构最清晰的框架了。

之前看帮助等,算是学者用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 正在做这个事情,不过比较菜。有兴趣我们可以相互学习(*^__^*) 涨姿势了 别太早深入细节,类库、插件都是浮云,框架框架,合理的架构规范最重要。
要让大象跳舞,在功能强大的前提下,尽量的轻,别动不动引用一堆类,一堆配置文件。
很多框架只能说是个类库
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

See all articles