,看第三句
$router=loader::load(”router”);
这句话也很简单,就是加载loader函数的静态函数load,下面我们来loader.php
classloader
{
privatestatic$loaded=array();
publicstaticfunctionload($object){
$valid=array("library",
"view",
"model",
"helper",
"router",
"config",
"hook",
"cache",
"db");
if(!in_array($object,$valid)){
thrownewException("Notavalidobject'{$object}'toload");
}
if(empty(self::$loaded[$object])){
self::$loaded[$object]=new$object();
}
returnself::$loaded[$object];
}
}
这个文件就是去加载对象,因为以后我们可能会丰富这个MVC系统,会有model,helper,config等等的组件。如果加载的组件不在有效的范围内,我们抛出一个异常。如果在的话,我们实例化一个对象,其实这里用了单件
设计模式。也就是这个对象其实就只能是一个实例化对象,如果没有实例化,创建一个,如果存在的,则不实例化。
好,因为我们现在要加载的是router组件,所以我们看下router.php文件,这个文件的作用就是映射URL,对URL进行解析。
router.php
classrouter
{
private$route;
private$controller;
private$action;
private$params;
publicfunction__construct()
{
$path=array_keys($_GET);
if(!isset($path[0])){
if(!empty($default_controller))
$path[0]=$default_controller;
else
$path[0]="index";
}
$route=$path[0];
$this->route=$route;
$routeParts=split("/",$route);
$this->controller=$routeParts[0];
$this->action=isset($routeParts[1])?$routeParts[1]:"base";
array_shift($routeParts);
array_shift($routeParts);
$this->params=$routeParts;
}
publicfunctiongetAction(){
if(empty($this->action))$this->action="main";
return$this->action;
}
publicfunctiongetController(){
return$this->controller;
}
publicfunctiongetParams(){
return$this->params;
}
}
我们可以看到,首先我们是拿到$_GET,用户Request的URL,然后从URL里我们解析出Controller和Action,以及Params
比如我们的地址是http://www.tino
web.cn/user/profile/id/3
那么从上面的地址,我们可以拿到controller是user,action似乎profile,参数是id以及3
OK我们看最后一句,就是
dispatcher::dispatch($router);
这句话的意思很明了,就是拿到URL解析的结果,然后通