1 单一入口模式的好处
所有的服务器端文件和目录的起始路径都是基于这个入口文件index.php,路径处理变得简单
2 简单实现代码
直接上代码:
/*******************************************************
*
* URL 路由原理展示代码
*
* 浏览器访问地址: http://server/index.php?C=Controler1&M=Method1
* 根据C找到控制器类,再根据M找到方法,然后执行这个方法
*
* ****************************************************/
$C = isset($_GET['C'])?$_GET['C']:NULL;
$M = isset($_GET['M'])?$_GET['M']:NULL;
if($C != NULL && $M != NULL && class_exists($C) && method_exists($C, $M)) {
$cObj = new $C();
$cObj->$M();
}else{
echo '找不到控制器或方法';
exit;
}
// 控制器1
class Controler1
{
public function Method1()
{
echo 'Controler1, Method1';
}
public function Method2()
{
echo 'Controler1, Method2';
}
}
// 控制器2
class Controler2
{
public function Method1()
{
echo 'Controler2, Method1';
}
public function Method2()
{
echo 'Controler2, Method2';
}
}
基本思路是浏览器端通过URL字符串提供控制器类的名字和方法的名字,PHP据此找到对应的类和方法。
PHP存在可变变量、可变函数、可变类,变量名、类名、方法名本身也可以作为变量的值在语句中使用,这在C#中只能通过反射解决吧。