摘要://命名空间 namespace tang; class Route{ //路由的配置信息 protected $route = []; //路由的模块/控制器/操作  
//命名空间
namespace tang;
class Route{
//路由的配置信息
protected $route = [];
//路由的模块/控制器/操作
public $pathinfo = [];
//路由的参数
public $params = [];
//构造器
public function __construct($route)
{
$this->route = $route;
}
//解析路由
public function parse($queryStr = ""){
//第一步:切割为数组
$queryStr = trim(strtolower($queryStr),'/');
$queryStr = explode('/',$queryStr);
//$queryStr = array_filter($queryStr);
//2.解析出数组中的内容
switch (count($queryStr))
{
//如果是空数组就是默认模块,控制器,操作
case 0:
$this->pathinfo = $this->route;
break;
//有模块,没有控制器和操作
case 1:
$this->pathinfo['module'] = $queryStr[0];
break;
//有模块,有控制器没有操作
case 2:
$this->pathinfo['module'] = $queryStr[0];
$this->pathinfo['controller'] = $queryStr[1];
break;
//有模块,有控制器,有操作
case 3:
$this->pathinfo['module'] = $queryStr[0];
$this->pathinfo['controller'] = $queryStr[1];
$this->pathinfo['action'] = $queryStr[2];
break;
//参数进行处理
default:
$this->pathinfo['module'] = $queryStr[0];
$this->pathinfo['controller'] = $queryStr[1];
$this->pathinfo['action'] = $queryStr[2];
//从索引的第三个参数起,每第四个都成对出现
$arr = array_slice($queryStr,3);
for($i=0;$i<count($arr);$i+=2){
if (isset($arr[$i+1])){
$this->params[$arr[$i]] = $arr[$i+1];
}
}
break;
}
return $this;
}
//请求分发
public function dispatch()
{
//生成控制器类名称: app\模块\controller\控制器类;
//模块名
$module = $this->pathinfo['module'];
//拿到控制器类名
$controller = '\app\\'.$module.'\controller\\'.$this->pathinfo['controller'];
//操作名
$action = $this->pathinfo['action'];
//判断下类中是否有操作没有的话,执行默认的方法
if (!method_exists($controller,$action)){
$action = $this->route['action'];
echo '没有操作';
}
//用户亲求到指定的控制器操作上
return call_user_func_array([new $controller,$action],$this->params);
}
}
$d = $_SERVER['QUERY_STRING'];
//配置文件数组
$route = require 'config.php';
//实例化对象
$route = new Route($route);
//方法
$route->parse($d);
echo "<pre>";
//打印解析出的模块/控制器/方法
print_r($route->pathinfo);
//打印参数
print_r($route->params);
require __DIR__.'/../app/admin/controller/Index.php';
echo $route->dispatch();namespace app\admin\controller;
class Index{
public function index($name,$age){
echo '你好我是Index中的index方法'.'参数name='.$name.' '.'age='.$age;
}
}
批改老师:查无此人批改时间:2019-01-26 09:20:47
老师总结:完成的不错。像这样的作业,可以写写你对路由的理解。批作业时,可以告诉你哪里不足。继续加油