今天在写路由类中执行路由闭包方法的时候,突然遇到了一个问题。
需求是这样的:
触发某条路由之后执行对应的闭包函数。闭包函数中可能存在参数但个数不确定。
现在把路由规则值数组中(self::$urlVars)对应的值赋给闭包中的参数
self::$urlVars大致格式如下:
1 2 3 4 5 6 7 8 9
| [ ':num' => [ '0' => '123'; '1' => '456'; ], ':alphabet'=> 'aaa', ];
|
由于数组索引是不规则的又不想用foreach,然后发现php还有个current、next、prev函数用于对数组指针对应单元的读取。然后就准备用这个写(代码如下)。
1 2 3 4 5 6 7 8 9 10 11 12 13
| current(self::$urlVars); $param = []; for($i = 0;$i < $params;$i++){ $item = next(self::$urlVars); if(is_array($item)){ $param[] = $item[0]; }else{ $param[] = $item; } } call_user_func_array($callback,$param);
|
然后就内存耗尽了= =,查阅php文档发现