我与豆包合作重构了极致单文件纯原生PHP框架JoPHP

       从春节开始就在大力推进DeepSeek的落地应用,也确实通过DeepSeek落地应用拿到了外包项目开发的业务,但在我日常的工作应用中在DeepSeek和豆包之间我还是选择了豆包,当然也用百度比较多,特别是百度文库。

       本来是想使用TP最新版升级下JoPHP框架完全开源出来,毕竟现在PHP被压的几乎就剩下电商的一些应用了,其他各行业WEB应用大部分都已被JAVA统治。但一个新的念头突然到来,那就是干脆用豆包试试能不能整一套全新的PHP原生开源框架。

【一】发出指令

       随即打开豆包写代码模式开问:

请用原生php8写一个纯php版的mvc框架

      随即豆包生成如下项目结构和代码:

下面为你呈现一个用原生 PHP 8 编写的简易 MVC 框架。该框架涵盖了基本的路由、控制器、模型和视图功能,能够让你以 MVC 架构来构建 Web 应用。

【二】生成标准版PHP原生框架

目录结构

project/
├── app/
│   ├── controllers/
│   │   └── HomeController.php
│   ├── models/
│   │   └── UserModel.php
│   └── views/
│       └── home/
│           └── index.php
├── core/
│   ├── App.php
│   ├── Controller.php
│   ├── Model.php
│   └── Router.php
├── public/
│   └── index.php
└──.htaccess

代码实现

1. .htaccess

此文件用来把所有请求重定向到 public/index.php

apache

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,L]
2. core/App.php

这是框架的核心类,负责初始化和运行应用。

php

<?php
namespace Core;

class App
{
    protected $router;

    public function __construct()
    {
        $this->router = new Router();
    }

    public function run()
    {
        $this->router->dispatch();
    }
}
3. core/Router.php

该类用于解析 URL 并分发请求到相应的控制器和方法。

php

<?php
namespace Core;

class Router
{
    public function dispatch()
    {
        $url = isset($_GET['url']) ? $_GET['url'] : 'home/index';
        $url = explode('/', $url);

        $controllerName = ucfirst(array_shift($url)) . 'Controller';
        $methodName = array_shift($url) ?: 'index';

        $controllerFile = '../app/controllers/' . $controllerName . '.php';

        if (file_exists($controllerFile)) {
            require_once $controllerFile;
            $controllerNamespace = 'App\Controllers\\' . $controllerName;
            $controller = new $controllerNamespace();

            if (method_exists($controller, $methodName)) {
                call_user_func_array([$controller, $methodName], $url);
            } else {
                echo "Method not found";
            }
        } else {
            echo "Controller not found";
        }
    }
}
4. core/Controller.php

这是所有控制器的基类,包含视图渲染方法。

php

<?php
namespace Core;

class Controller
{
    public function view($view, $data = [])
    {
        extract($data);
        $viewFile = '../app/views/' . $view . '.php';
        if (file_exists($viewFile)) {
            require_once $viewFile;
        } else {
            echo "View not found";
        }
    }
}
5. core/Model.php

此为所有模型的基类,可添加数据库连接等功能。

php

<?php
namespace Core;

class Model
{
    // 这里可以添加数据库连接等逻辑
}
6. app/controllers/HomeController.php

这是一个示例控制器,继承自 Core\Controller

php

<?php
namespace App\Controllers;

use Core\Controller;

class HomeController extends Controller
{
    public function index()
    {
        $data = ['message' => 'Welcome to the MVC framework!'];
        $this->view('home/index', $data);
    }
}
7. app/models/UserModel.php

这是一个示例模型,继承自 Core\Model

php

<?php
namespace App\Models;

use Core\Model;

class UserModel extends Model
{
    // 这里可以添加用户相关的数据库操作
}
8. app/views/home/index.php

这是一个示例视图文件。

php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home Page</title>
</head>
<body>
    <h1><?php echo $message; ?></h1>
</body>
</html>
9. public/index.php

这是应用的入口文件,初始化并运行应用。

php

<?php
require_once '../core/App.php';
require_once '../core/Router.php';
require_once '../core/Controller.php';
require_once '../core/Model.php';

$app = new \Core\App();
$app->run();

使用说明

  • 把上述代码按照指定的项目结构进行放置。
  • 确保你的服务器支持 .htaccess 文件。
  • 访问 http://yourdomain.com/home/index 就能看到示例页面。

        这个简易的 MVC 框架为你构建 Web 应用提供了基础架构,你可以在此基础上进行扩展,例如添加数据库连接、路由配置等功能。

【三】生成单文件原生PHP框架

续写合并指令

请把框架核心类合并为一个单文件

以下是将上述 MVC 框架核心类合并为一个单文件的代码:

框架核心单文件代码

php

<?php
// 定义命名空间分隔符常量
define('DS', DIRECTORY_SEPARATOR);

// 定义项目根目录
define('ROOT', dirname(__DIR__) . DS);

// 核心类集合
class App
{
    protected $router;

    public function __construct()
    {
        $this->router = new Router();
    }

    public function run()
    {
        $this->router->dispatch();
    }
}

class Router
{
    public function dispatch()
    {
        $url = isset($_GET['url']) ? $_GET['url'] : 'home/index';
        $url = explode('/', $url);

        $controllerName = ucfirst(array_shift($url)) . 'Controller';
        $methodName = array_shift($url) ?: 'index';

        $controllerFile = ROOT . 'app' . DS . 'controllers' . DS . $controllerName . '.php';

        if (file_exists($controllerFile)) {
            require_once $controllerFile;
            $controllerNamespace = 'App\\Controllers\\' . $controllerName;
            $controller = new $controllerNamespace();

            if (method_exists($controller, $methodName)) {
                call_user_func_array([$controller, $methodName], $url);
            } else {
                echo "Method not found";
            }
        } else {
            echo "Controller not found";
        }
    }
}

class Controller
{
    public function view($view, $data = [])
    {
        extract($data);
        $viewFile = ROOT . 'app' . DS . 'views' . DS . $view . '.php';
        if (file_exists($viewFile)) {
            require_once $viewFile;
        } else {
            echo "View not found";
        }
    }
}

class Model
{
    // 这里可以添加数据库连接等逻辑
}


// 应用入口代码
$app = new App();
$app->run();

说明:

  1. 常量定义
    • DS 是目录分隔符常量,用于保证不同操作系统下路径的兼容性。
    • ROOT 是项目根目录常量,方便后续文件路径的引用。
  2. 核心类整合
    • App 类负责初始化和运行应用,它依赖 Router 类来处理路由分发。
    • Router 类解析 URL 并将请求分发到相应的控制器和方法。
    • Controller 类作为所有控制器的基类,提供视图渲染功能。
    • Model 类作为所有模型的基类,可用于添加数据库连接等逻辑。
  3. 应用入口
    在文件末尾创建 App 类的实例并调用 run 方法启动应用。

你可以将上述代码保存为一个文件,例如 core.php,然后在项目中使用它来构建 MVC 架构的应用。项目的其他部分(如控制器、模型、视图)的结构和代码与之前的示例保持一致。

【四】继续扩展成为真正的JoPHP

        根据需要继续输入扩展指令,强大的豆包就能生成更多框架代码类。

        笔者通过不停的扩展和调整测试,已形成JoPHP,具备以下功能:

      核心特性

        1.单一文件:只需一个文件,即可拥有完整的框架功能,无需复杂的文件结构和配置,大大降低了项目的复杂度和部署难度。

        2.原生纯净:框架用纯原生PHP编写,不依赖第三方库,降低了项目的复杂程度和风险。让开发者的代码更安全,运行更稳定。

        3.灵活配置:支持生产环境和开发环境的配置加载,开发环境配置可覆盖生产环境,方便开发者在不同环境下进行调试和部署。

        4.安全过滤:提供了SQL注入和XSS攻击过滤功能,有效保护应用免受安全威胁,让开发者无需担心安全问题。

        5.处错完善:完善的错误处理和异常处理机制,将错误信息记录到日志文件中,并根据调试模式返回不同的错误响应,方便开发者快速定位和解决问题。

        6.自动加载:基于PSR - 4规范实现类的自动加载,让代码结构更加清晰,提高了代码的可维护性和可扩展性。

        7.自动路由:支持多应用模式,提供路由分组、路由注册和路由匹配功能,同时支持自动创建控制器和模型文件,提高了开发效率。

        8.自动请求:根据请求方法和URI匹配路由,并调用相应的回调函数或控制器方法,同时支持自动实现API和视图渲染。

      多重兼容

        数据库操作:支持MySQL、SQLite等多种数据库,有增删改查、分页查询、软删除等实用功能。在操作数据库时,会防止数据被恶意篡改,保证数据安全。

        文件数据库:自带纯PHP写的微型文件数据库,框架在不连接任何其他数据库情况下,可直接使用兼容MySQL的语法执行文件数据库操作。

        文件管理:框架里的JoFileManager类,既能在本地存储文件,也能使用阿里云、七牛云、百度云、腾讯云等云服务存储文件,文件上传、查看、删除,以及目录删除等操作都能轻松完成,满足不同场景的文件存储要求。

        缓存机制:框架自带缓存功能,能减少查询数据库的次数,让系统运行得更快。简单配置一下,就能缓存常用数据,提高响应速度。

        国产化数据库支持:全面支持国产数据库,如达梦、人大金仓、南大通用、优炫UXDB等,为国产化项目提供了有力的支持。同时,也兼容 MySQL、SQLite 等常见数据库,满足不同项目的需求。

        国密算法集成:集成了国密算法,如 SM2、SM3、SM4 等,为数据传输和存储提供了更高的安全性。在数据加密、签名验证等方面,保障了系统的安全性和可靠性。

       JoPHP完整代码请参考:
点击查看https://gitee.com/duihao/jophp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值