搜索
首页后端开发php教程超简单开发自己的php框架一点都不难!

超简单开发自己的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。如有侵权,请联系admin@php.cn删除
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Laravel中发现文件下载的存储::下载在Laravel中发现文件下载的存储::下载Mar 06, 2025 am 02:22 AM

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

如何注册和使用Laravel服务提供商如何注册和使用Laravel服务提供商Mar 07, 2025 am 01:18 AM

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。