基于php8和mysql,不使用第三方框架,设计一个安全高效可扩展的多应用php原生开发框架
设计一个安全、高效、可扩展的多应用PHP原生开发框架需要考虑多个方面,包括目录结构、路由、控制器、模型、视图、安全性、数据库操作、配置管理、错误处理和日志记录等。以下是一个基本的设计思路:
/my_framework
/app
/controllers
/models
/views
/config
/core
/public
/css
/js
/index.php
/logs
/storage
/vendor
.htaccess
composer.json
在 /config
目录下创建配置文件,例如 config.php
:
<?php
return [
'db' => [
'host' => 'localhost',
'dbname' => 'my_database',
'user' => 'root',
'password' => '',
],
'app' => [
'base_url' => 'http://localhost/my_framework/public',
],
];
在 /core
目录下创建 Router.php
:
<?php
class Router {
private $routes = [];
public function add($route, $callback) {
$this->routes[$route] = $callback;
}
public function dispatch($url) {
foreach ($this->routes as $route => $callback) {
if ($url == $route) {
return call_user_func($callback);
}
}
http_response_code(404);
echo "404 Not Found";
}
}
在 /app/controllers
目录下创建一个示例控制器 HomeController.php
:
<?php
class HomeController {
public function index() {
echo "Welcome to Home!";
}
}
在 /app/models
目录下创建一个示例模型 User.php
:
<?php
class User {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function getAllUsers() {
$stmt = $this->db->query("SELECT * FROM users");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
在 /app/views
目录下创建一个示例视图 home.php
:
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to Home!</h1>
</body>
</html>
在 /core
目录下创建 Database.php
:
<?php
class Database {
private $pdo;
public function __construct($config) {
$dsn = "mysql:host={$config['host']};dbname={$config['dbname']}";
$this->pdo = new PDO($dsn, $config['user'], $config['password']);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function query($sql) {
return $this->pdo->query($sql);
}
}
public
目录下创建 .htaccess
文件,防止直接访问非公开文件:<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</IfModule>
在 /core
目录下创建 ErrorHandler.php
:
<?php
class ErrorHandler {
public static function handle($errno, $errstr, $errfile, $errline) {
$log = "[Error] [$errno] $errstr in $errfile on line $errline\n";
error_log($log, 3, __DIR__ . '/../logs/error.log');
echo "An error occurred. Please try again later.";
}
}
set_error_handler(['ErrorHandler', 'handle']);
在 public/index.php
中引入所有核心文件并启动应用:
<?php
require_once __DIR__ . '/../core/Router.php';
require_once __DIR__ . '/../core/Database.php';
require_once __DIR__ . '/../core/ErrorHandler.php';
require_once __DIR__ . '/../app/controllers/HomeController.php';
$config = require __DIR__ . '/../config/config.php';
$db = new Database($config['db']);
$router = new Router();
$router->add('/', [new HomeController(), 'index']);
$url = $_SERVER['REQUEST_URI'];
$router->dispatch($url);
Router
中添加更多的路由规则。config
目录下添加更多的配置文件。这个框架的设计是非常基础的,但它提供了一个良好的起点,可以根据具体需求进行扩展和优化。