从春节开始就在大力推进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();
说明:
- 常量定义:
DS
是目录分隔符常量,用于保证不同操作系统下路径的兼容性。ROOT
是项目根目录常量,方便后续文件路径的引用。
- 核心类整合:
App
类负责初始化和运行应用,它依赖Router
类来处理路由分发。Router
类解析 URL 并将请求分发到相应的控制器和方法。Controller
类作为所有控制器的基类,提供视图渲染功能。Model
类作为所有模型的基类,可用于添加数据库连接等逻辑。
- 应用入口:
在文件末尾创建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