PHP高级编程示例项目

admin1个月前 (02-01)it知识82
<?phpnamespace App\Controllers;use App\Models\User;use Exception;class UserController {    private $userModel;        public function __construct() {        $this->userModel = new User();    }        // 获取所有用户    public function index() {        try {            $users = $this->userModel->getAllUsers();            return $this->jsonResponse(['status' => 'success', 'data' => $users]);        } catch (Exception $e) {            return $this->jsonResponse(['status' => 'error', 'message' => $e->getMessage()], 500);        }    }        // 创建新用户    public function create($data) {        try {            // 数据验证            if (!$this->validateUserData($data)) {                return $this->jsonResponse(['status' => 'error', 'message' => 'Invalid user data'], 400);            }                        $userId = $this->userModel->createUser($data);            return $this->jsonResponse(['status' => 'success', 'user_id' => $userId], 201);        } catch (Exception $e) {            return $this->jsonResponse(['status' => 'error', 'message' => $e->getMessage()], 500);        }    }        // 获取单个用户    public function show($id) {        try {            $user = $this->userModel->getUserById($id);            if (!$user) {                return $this->jsonResponse(['status' => 'error', 'message' => 'User not found'], 404);            }            return $this->jsonResponse(['status' => 'success', 'data' => $user]);        } catch (Exception $e) {            return $this->jsonResponse(['status' => 'error', 'message' => $e->getMessage()], 500);        }    }        // 更新用户    public function update($id, $data) {        try {            if (!$this->userModel->getUserById($id)) {                return $this->jsonResponse(['status' => 'error', 'message' => 'User not found'], 404);            }                        if (!$this->validateUserData($data)) {                return $this->jsonResponse(['status' => 'error', 'message' => 'Invalid user data'], 400);            }                        $result = $this->userModel->updateUser($id, $data);            return $this->jsonResponse(['status' => 'success', 'message' => 'User updated']);        } catch (Exception $e) {            return $this->jsonResponse(['status' => 'error', 'message' => $e->getMessage()], 500);        }    }        // 删除用户    public function delete($id) {        try {            if (!$this->userModel->getUserById($id)) {                return $this->jsonResponse(['status' => 'error', 'message' => 'User not found'], 404);            }                        $this->userModel->deleteUser($id);            return $this->jsonResponse(['status' => 'success', 'message' => 'User deleted']);        } catch (Exception $e) {            return $this->jsonResponse(['status' => 'error', 'message' => $e->getMessage()], 500);        }    }        // 数据验证    private function validateUserData($data) {        return isset($data['name']) && isset($data['email']) && filter_var($data['email'], FILTER_VALIDATE_EMAIL);    }        // JSON响应    private function jsonResponse($data, $statusCode = 200) {        http_response_code($statusCode);        header('Content-Type: application/json');        return json_encode($data);    }}
<?phpnamespace App\Models;use PDO;use Exception;class User {    private $pdo;        public function __construct() {        $host = 'localhost';        $dbname = 'test_db';        $username = 'root';        $password = '';                try {            $this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);        } catch (Exception $e) {            throw new Exception("Database connection failed: " . $e->getMessage());        }    }        // 获取所有用户    public function getAllUsers() {        $stmt = $this->pdo->query("SELECT * FROM users");        return $stmt->fetchAll(PDO::FETCH_ASSOC);    }        // 根据ID获取用户    public function getUserById($id) {        $stmt = $this->pdo->prepare("SELECT * FROM users WHERE id = ?");        $stmt->execute([$id]);        return $stmt->fetch(PDO::FETCH_ASSOC);    }        // 创建用户    public function createUser($data) {        $stmt = $this->pdo->prepare("INSERT INTO users (name, email, created_at) VALUES (?, ?, NOW())");        $stmt->execute([$data['name'], $data['email']]);        return $this->pdo->lastInsertId();    }        // 更新用户    public function updateUser($id, $data) {        $stmt = $this->pdo->prepare("UPDATE users SET name = ?, email = ? WHERE id = ?");        return $stmt->execute([$data['name'], $data['email'], $id]);    }        // 删除用户    public function deleteUser($id) {        $stmt = $this->pdo->prepare("DELETE FROM users WHERE id = ?");        return $stmt->execute([$id]);    }}
<?phpnamespace App\Core;use PDO;use PDOException;class Database {    private static $instance = null;    private $pdo;        private function __construct() {        $host = 'localhost';        $dbname = 'test_db';        $username = 'root';        $password = '';        $options = [            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,            PDO::ATTR_EMULATE_PREPARES => false,        ];                try {            $this->pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password, $options);        } catch (PDOException $e) {            throw new PDOException($e->getMessage(), (int)$e->getCode());        }    }        // 获取单例实例    public static function getInstance() {        if (self::$instance === null) {            self::$instance = new self();        }        return self::$instance;    }        // 获取PDO连接    public function getConnection() {        return $this->pdo;    }        // 防止克隆    private function __clone() {}        // 防止反序列化    public function __wakeup() {        throw new Exception("Cannot unserialize singleton");    }}
<?phpnamespace App\Core;class Router {    private $routes = [];        // 添加GET路由    public function get($path, $callback) {        $this->routes['GET'][$path] = $callback;        return $this;    }        // 添加POST路由    public function post($path, $callback) {        $this->routes['POST'][$path] = $callback;        return $this;    }        // 添加PUT路由    public function put($path, $callback) {        $this->routes['PUT'][$path] = $callback;        return $this;    }        // 添加DELETE路由    public function delete($path, $callback) {        $this->routes['DELETE'][$path] = $callback;        return $this;    }        // 解析请求并执行对应路由    public function resolve($requestUri, $requestMethod) {        // 移除查询参数        $path = parse_url($requestUri, PHP_URL_PATH);                // 查找匹配的路由        if (isset($this->routes[$requestMethod][$path])) {            $callback = $this->routes[$requestMethod][$path];                        // 如果是控制器方法            if (is_string($callback)) {                // 分割控制器和方法                list($controller, $method) = explode('@', $callback);                $controller = "App\\Controllers\\" . $controller;                $controllerInstance = new $controller();                return call_user_func([$controllerInstance, $method]);            }                        // 如果是闭包函数            if (is_callable($callback)) {                return call_user_func($callback);            }        }                // 未找到路由        http_response_code(404);        return json_encode(['status' => 'error', 'message' => 'Route not found']);    }}
<?php// 自动加载spl_autoload_register(function ($class) {    $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';    if (file_exists($file)) {        require_once $file;    }});use App\Core\Router;use App\Controllers\UserController;// 创建路由实例$router = new Router();// 定义路由$router->get('/', function() {    return json_encode(['message' => 'Welcome to PHP Advanced Programming Example']);});$router->get('/users', 'UserController@index');$router->get('/users/{id}', 'UserController@show');$router->post('/users', 'UserController@create');$router->put('/users/{id}', 'UserController@update');$router->delete('/users/{id}', 'UserController@delete');// 解析请求echo $router->resolve($_SERVER['REQUEST_URI'], $_SERVER['REQUEST_METHOD']);
{    "name": "php-advanced-programming-example",    "description": "PHP高级编程示例项目",    "type": "project",    "require": {        "php": ">=7.4"    },    "autoload": {        "psr-4": {            "App\\": "./"        }    }}

这个PHP高级编程示例项目展示了以下核心概念和特性:

面向对象编程‌:使用命名空间、类和对象实现清晰的代码结构

‌设计模式‌:

单例模式(Database类)

MVC架构模式(控制器、模型分离)

‌数据库操作‌:使用PDO进行安全的数据库交互,包含预处理语句防止SQL注入

‌RESTful API设计‌:实现完整的CRUD操作(创建、读取、更新、删除)

‌错误处理‌:使用异常处理机制确保程序稳定性

‌路由系统‌:自定义路由解析器支持HTTP方法和路径匹配

‌自动加载‌:PSR-4标准的自动加载机制

‌JSON响应‌:标准化API响应格式

‌数据验证‌:基本的输入数据验证机制

‌依赖管理‌:Composer配置文件管理项目依赖

项目结构清晰,遵循现代PHP开发最佳实践。


标签: 分享IT知识
返回列表

上一篇:camel

下一篇:calf

相关文章

中秋

月光如水,映照着中国大地。这是一个收获的季节,也是一个团圆的时刻。在秋天的长夜里,一轮明月在苍穹之中绽放出光芒,那是中秋之夜的明月,是华夏民族心中的瑰宝。中秋,又称月圆之夜,起源于古代农耕社会对月亮的...

更创新的挣钱方式

在探讨更创新的利用网站挣钱的方式时,我们可以结合当前的技术趋势和市场需求,挖掘一些具有前瞻性和独特性的策略。以下是一些建议:一、基于大数据与人工智能的个性化服务智能推荐系统:利用大数据和人工智能技术,...

山海经·大荒东经

东海之外大壑,少昊之国。少昊孺帝颛顼于此,弃其琴瑟。有甘山者,甘水出焉,生甘渊。大荒东南隅有,名皮母地丘。东海之外,大荒之中,有山名曰大言,日月所出。有波谷山者,有大人之国。有大人之市,名曰大人之堂。...

后端懒加载示例(以分页加载数据为例)

场景描述‌假设有一个博客系统,每页显示10篇文章,用户滚动到底部时加载下一页的文章。‌前端请求代码(使用Fetch API)let page = 1; const&nb...

Flutter有哪些常用的UI组件?

Flutter 提供了丰富且强大的 UI 组件,这些组件可以帮助开发者快速构建美观且功能丰富的用户界面。以下是一些 Flutter 中常用的 UI 组件,按照功能和用途进行了分类归纳:基础组件‌Con...

产品经理与程序员的分工与合作关系分析

一、角色定位与能力差异‌核心职责差异‌程序员的核心能力是技术实现,擅长将需求转化为代码,关注技术可行性(如功能能否实现、性能优化等)产品经理则聚焦需求分析与产品规划,需平衡用户价值、商业目标与技术实现...