You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在简单PHP文件中无需引入即可像Laravel的web.php一样使用类方法

实现类似Laravel中全局可用Route类的方法
  • 核心逻辑:Laravel里能直接在routes/web.php用Route::get(),本质是提前把Route类加载到全局环境,同时用静态方法简化调用。自己搭小型MVC框架不用搞复杂的门面模式,用最直白的方式就能实现。

  • 第一步:编写基础Route类
    先实现一个能注册、匹配路由的Route类,示例代码:

    class Route {
        private static $routes = [];
    
        // 注册GET请求路由
        public static function get($uri, $action) {
            self::$routes['GET'][$uri] = $action;
        }
    
        // 注册POST请求路由
        public static function post($uri, $action) {
            self::$routes['POST'][$uri] = $action;
        }
    
        // 匹配当前请求并执行对应逻辑
        public static function dispatch() {
            $requestMethod = $_SERVER['REQUEST_METHOD'];
            $requestUri = $_SERVER['REQUEST_URI'];
    
            if (isset(self::$routes[$requestMethod][$requestUri])) {
                $action = self::$routes[$requestMethod][$requestUri];
                // 兼容闭包和控制器@方法两种写法
                if (is_callable($action)) {
                    call_user_func($action);
                } elseif (strpos($action, '@') !== false) {
                    list($controllerName, $methodName) = explode('@', $action);
                    $controller = new $controllerName();
                    $controller->$methodName();
                }
            } else {
                http_response_code(404);
                echo '404 页面不存在';
            }
        }
    }
    
  • 第二步:全局加载Route类
    在框架的入口文件(比如index.php)里,先引入Route类,再加载路由文件,最后执行路由匹配:

    // index.php
    // 引入Route类文件
    require_once './core/Route.php';
    // 加载路由定义文件
    require_once './routes/web.php';
    // 匹配并执行路由
    Route::dispatch();
    
  • 第三步:在路由文件里直接使用
    现在routes/web.php里就可以像Laravel那样写路由了:

    // routes/web.php
    Route::get('/', function() {
        echo '首页';
    });
    
    Route::get('/about', 'AboutController@show');
    
  • 可选优化

    • 嫌Route::麻烦的话,可以封装全局函数:
      // 在入口文件里添加这些函数
      function get($uri, $action) {
          Route::get($uri, $action);
      }
      
      function post($uri, $action) {
          Route::post($uri, $action);
      }
      
      之后路由文件里直接写get('/', function() { ... });即可
    • 还可以扩展Route类,增加PUT、DELETE等请求方法的支持,或者添加中间件功能。

内容的提问来源于stack exchange,提问作者mohsin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:45:58