PlumePHP - 羽量级的单文件php开发框架

PlumePHP是一个单入口,单文件PHP框架,适用于简单系统的快速开发,提供了简单的路由方式,抛弃了坑爹的PHP模板,采用原生PHP语法来渲染页面。

简介

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 的定位是「够用就好」的轻量方案,而非企业级长期架构。


延伸阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「php」更多文章

  1. 图像与文档处理
  2. 流封装与文件系统
  3. gRPC 与 Protobuf 服务