简介
PlumePHP 是一个单入口,单文件PHP框架,适用于简单系统的快速开发,提供了简单的路由方式,抛弃了坑爹的PHP模板,采用原生PHP语法来渲染页面。如果您正在开发一个简单的功能,而又不想使用Yii,CodeIgniter,ThinkPHP等框架,则可以试用一下该框架。
区别于其他Web框架,该框架是一个绝对的单文件框架,只需要在入口index.php文件中引入PlumePHP.php文件。
使用方法也及其简单,只需下载框架文件index.php到项目根目录,然后通过浏览器输入项目访问地址,即可自动生成框架目录结构(项目目录需要有写入权限)。
特点
- 加载简单,引入只需一个文件
- 日志机制
- 支持HTTP(网页模式)和cli(脚本模式)两种模式
- 事件驱动
- 数据库操作简便
- 助手类引入便捷
- 文件处理封装
- 时间处理封装
- Socket请求封装,支持代理模式
- Session支持cookie、file、db多种方式
- 支持委托代理机制
- 安全过滤器机制
- 其他
入口文件:index.php
// 加载框架文件
include dirname(__DIR__) . DIRECTORY_SEPARATOR . 'PlumePHP.php';
$app = PlumePHP::app();
// api首页展示
$app->route('GET /api', function() {
echo json_encode(['code'=>0, 'data'=>'api', 'msg'=>'success'], JSON_UNESCAPED_UNICODE);
});
$app->route('GET /', function () {
echo 'Hello World!';
return false;
});
// 通用的路由逻辑
$app->route('*', function() use ($app) {
$app->runAction();
});
// 启动
$app->start();
or
// 加载框架文件
include dirname(__DIR__) . DIRECTORY_SEPARATOR . 'PlumePHP.php';
// api首页展示
PlumePHP::route('GET /api', function() {
echo json_encode(['code'=>0, 'data'=>'api', 'msg'=>'success'], JSON_UNESCAPED_UNICODE);
});
// 通用的路由逻辑
PlumePHP::route('*', function() {
PlumePHP::app()->runAction();
});
// 启动
PlumePHP::start();
框架架构总览
PlumePHP 采用极简的单文件设计理念,将 MVC 分层、路由分发、数据库访问、事件调度等核心能力全部封装进一个 PlumePHP.php 文件中。这种设计不是为了炫技,而是为了降低小型项目和原型系统的部署与维护成本。当项目规模不大时,单文件意味着零配置、零依赖、零学习曲线。单文件架构的最大优势在于可移植性,整个框架可以随项目一起打包部署,无需 Composer 依赖管理,也无需处理版本冲突问题。对于临时性的小型工具网站、内部管理后台或快速原型验证场景,这种极简哲学能够显著提升开发效率。
在模块组织上,PlumePHP 遵循约定优于配置的原则。首次运行时,框架会自动创建以下目录结构:
project/
├── index.php # 入口文件
├── PlumePHP.php # 核心框架
├── app/
│ ├── controllers/ # 控制器目录
│ ├── models/ # 模型目录
│ ├── views/ # 视图模板目录
│ └── helpers/ # 助手类目录
├── config/ # 配置文件
├── runtime/ # 运行时日志和缓存
└── public/ # 静态资源
路由系统
PlumePHP 的路由系统基于正则匹配,支持 RESTful 风格:
$app = PlumePHP::app();
// 静态路由
$app->route('GET /users', function() {
// 查询用户列表
});
// 带参数路由
$app->route('GET /user/(\d+)', function($id) {
// 根据 $id 查询用户详情
});
事件驱动与钩子机制
框架内置 hook() 方法,允许在不修改核心代码的情况下扩展功能:
PlumePHP::hook('before_route', function($app) {
// 认证检查、日志记录
});
PlumePHP::hook('after_render', function($app, &$output) {
// 响应压缩、注入统计代码
});
数据库操作
基于 PDO 的封装,支持链式调用:
$db = PlumePHP::db();
$users = $db->table('users')
->where('status', '=', 1)
->orderBy('id', 'DESC')
->limit(10)
->get();
Session 与认证
支持 cookie、file、database 三种存储方式:
$app->config('session_type', 'db'); // cookie | file | db
PlumePHP::session('user_id', 123);
CLI 脚本模式
$app->route('cli cron/daily', function() {
echo "Cron executed at " . date('Y-m-d H:i:s') . "\n";
});
$app->start('cli');
适用场景与选型建议
| 场景 | 推荐 | 原因 |
|---|---|---|
| 小型 API 服务 | ✅ | 快速启动,无依赖 |
| 大型 Web 应用 | ❌ | 缺少 ORM、中间件生态 |
| 快速原型验证 | ✅ | 5 分钟搭建可运行框架 |
| 企业级项目 | ❌ | 缺少类型安全、单元测试支持 |
设计哲学与总结
PlumePHP 极简的设计并不意味着简陋。它精准地抓住了小型项目的核心痛点:配置繁琐、依赖冲突、学习成本高。在单文件架构中,开发者可以直观地看到框架的全部实现,理解请求从入口到响应的完整链路。这种透明性对于教学和原型验证极具价值。
然而,单文件架构有其天然的承载边界。当业务逻辑超过 5000 行、团队协作超过 3 人、或者需要复杂的缓存策略和消息队列集成时,迁移到 Laravel、ThinkPHP 或 Symfony 等全功能框架是更可持续的选择。PlumePHP 的定位是「够用就好」的轻量方案,而非企业级长期架构。
延伸阅读
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。