Php手工实现
PHP 手工实现基础框架
手工实现一个 PHP 框架需要理解核心组件,如路由、请求处理、视图渲染和数据库交互。以下是一个极简框架的实现思路:
路由系统
$requestUri = $_SERVER['REQUEST_URI'];
$routes = [
'/' => 'HomeController@index',
'/about' => 'AboutController@index'
];
if (array_key_exists($requestUri, $routes)) {
$handler = explode('@', $routes[$requestUri]);
$controller = new $handler[0]();
$method = $handler[1];
$controller->$method();
} else {
header("HTTP/1.0 404 Not Found");
}
控制器基础
class BaseController {
protected function render($view, $data = []) {
extract($data);
require __DIR__ . "/../views/{$view}.php";
}
}
class HomeController extends BaseController {
public function index() {
$this->render('home', ['title' => 'Welcome']);
}
}
数据库抽象层实现
手工实现数据库交互可以避免依赖ORM,使用PDO进行封装:
数据库连接
class Database {
private $pdo;
public function __construct() {
$this->pdo = new PDO(
'mysql:host=localhost;dbname=test',
'username',
'password'
);
}
public function query($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
}
模型示例
class UserModel {
private $db;
public function __construct() {
$this->db = new Database();
}
public function getById($id) {
$stmt = $this->db->query(
"SELECT * FROM users WHERE id = :id",
['id' => $id]
);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
模板引擎实现
手工实现简单的模板渲染功能:
模板解析
function renderTemplate($file, $vars) {
ob_start();
extract($vars);
include $file;
return ob_get_clean();
}
// 使用示例
$content = renderTemplate('views/home.php', ['title' => 'Home']);
依赖管理方案
手工实现类自动加载:
自动加载器
spl_autoload_register(function ($className) {
$file = __DIR__ . '/' . str_replace('\\', '/', $className) . '.php';
if (file_exists($file)) {
require $file;
}
});
安全防护措施
基础安全实现方案:
CSRF防护
session_start();
class CSRF {
public static function generate() {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
return $_SESSION['csrf_token'];
}
public static function validate($token) {
return isset($_SESSION['csrf_token'])
&& hash_equals($_SESSION['csrf_token'], $token);
}
}
输入过滤
function sanitizeInput($data) {
return htmlspecialchars(stripslashes(trim($data)), ENT_QUOTES);
}
以上实现展示了手工构建PHP框架的核心组件,实际开发中需要根据需求扩展更多功能如中间件、事件系统等。每个组件都可以进一步优化和扩展,形成完整的开发框架。




