如何理解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
相关产品推荐
相关产品推荐

