复制代码代码如下所示:
< PHP
级路由器{
路由表
私有$路由器=数组(
阵列(名字=用户列表
阵列(名字=用户信息
阵列(名字=因为
阵列(名字=userupdate
阵列(名字=userdel
);

输入/输入
公共功能分派(){
URL _server美元美元{ =request_uri};
方法_server美元美元{ =request_method};

foreach(美元->路由器为路由器){
模式$路由器 模式};
美元=爆炸(
如果(strcasecmp($拍{ 0 },$方法)= = 0){
是否匹配当前的路由
$params =美元-> checkurl($方法,strtolower($url),strtolower($拍{ 1 }));
如果($params!= NULL){
array_shift($params);
操作$路由器 };
找到第一个匹配路由,然后返回
返回这个->调用(合动作,$params);
}
}
}

404错误;
404 错误
}

私有函数调用(合动作,$params){
$行为=爆炸(#
美元美元classname =行为{ 0 }。动作;
美元美元methodename =行为{ 1 };
actiondir美元= dirname(__file__ directory_separator)。动作;

加载操作文件
类文件= actiondir美元美元美元。directory_separator类名。;
如果(!file_exists(合类文件)){
404 错误
404错误,未找到动作;
返回;
{人}
要求$类文件;
使用反射的执行方法
RC =新reflectionclass美元(约合className);
如果(!RC—> hasmethod美元($ methodename)){
404 错误
404错误,没有找到方法;
返回;
{人}
例如美元美元= RC -> newInstance();
$方法= $ RC -> getMethod($调用);
方法:invokeargs美元(合实例,$params);
}
}
}

常规匹配检查,并提取参数
私有函数checkurl($方法,$str,$模式){
检查$ $;
$ =数组();
$模式= LTrim(RTrim(合模式, / ));
($模式= / 。str_replace / / $模式
$模式= str_replace(
模式$;
/ / $str =元结构 / / ;
如果(preg_match(合模式,$str,马元)> 0){
返回$ MA;
}
返回null;
}
}
>