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

如何理解PHP数组赋值?自定义CMS中Routes多维数组用法疑问

PHP路由代码疑问解答

问题1:$this->routes[strtoupper(method)][pattern]中的routes是作为数组使用吗?

是,$this->routes本质是类的二维数组属性,这里完全是按数组的语法规则访问。

问题2:数组怎么能同时指定method和pattern两个键取值/赋值?

PHP原生支持多维数组结构,也就是数组的元素本身也可以是数组,这里的两层方括号是按层级访问二维数组,并不是“同时指定两个键”:

  • 第一层[strtoupper(method)]是取$this->routes数组中以大写请求方法(如GET、POST)为键的元素,这个元素本身也是一个数组,存的是当前请求方法下所有的路由规则。
  • 第二层[pattern]是从上面拿到的请求方法子数组中,取以路由匹配规则为键的元素,对应的值就是这个路由绑定的控制器处理逻辑。

举个实际的路由注册代码示例就能更清晰理解:

// 路由注册方法示例
public function register(string $method, string $pattern, callable|string $handler)
{
    $normalizedMethod = strtoupper($method);
    // 首次注册某类请求方法时,初始化对应的子数组
    if (!isset($this->routes[$normalizedMethod])) {
        $this->routes[$normalizedMethod] = [];
    }
    // 给二维数组赋值:第一层键是请求方法,第二层键是路由规则
    $this->routes[$normalizedMethod][$pattern] = $handler;
}

注册完成后$this->routes的结构大致如下:

[
    'GET' => [
        '/' => 'HomeController@index',
        '/user' => 'UserController@list'
    ],
    'POST' => [
        '/user' => 'UserController@create'
    ]
]

此时调用$this->routes['GET']['/user']就能直接拿到GET请求下/user路由对应的处理方法,和你看到的写法逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:06:03