PHP Dispath的实现思路及代码

url_rewrite函数的实现基本思路是:

获得URL的参数部分($_SERVER['PATH_INFO']) =》对参数进行处理 =》构造原始参数字符串 =》赋值给$_SERVER['QUERY_STRING']及$_SERVER['REQUEST_URI']。

以下是程序代码,都有注释,很容易看懂。

 

  1. /**
  2.  +------------------------------------------------------------------------------
  3.  * url重写实现函数 function.php
  4.  +------------------------------------------------------------------------------
  5.  * date:    2008-11-29
  6.  * author:  zbl
  7.  +------------------------------------------------------------------------------
  8.  **/
  9. function url_rewrite(){
  10.     if (isset( $_SERVER['PATH_INFO'])){
  11.         $url = substr($_SERVER['PATH_INFO'] , 1);   //url提交的参数部分,去掉'/'
  12.         $url = explode(':'$url ); //以':'分割存放在数组中$url中
  13.         foreach ($url as $key => $value){
  14.             if ($key == 0){ //判断参数名
  15.                 if ($value != '') {
  16.                     $_GET ['module'] = $url[$key];  //将值存入$_GET数组中
  17.                 }
  18.                 $querystring[] = 'module='.$url[$key];  //组合参数名及值
  19.             } else {
  20.                 if ($value != '') {
  21.                     $_GET['action'] = $url[$key];
  22.                 }
  23.                 $querystring[] = 'action='.$url[$key];
  24.             }
  25.         }
  26.         $_SERVER['QUERY_STRING'] = implode("&"$querystring);  //将组合后的字符串存入预定义变量$_SERVER['QUERY_STRING']中
  27.         $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];    //将完整的url地址存入预定义变量$_SERVER['REQUEST_URI']中
  28.     }
  29. }
  1. /**
  2.  +------------------------------------------------------------------------------
  3.  * 类文件module.php
  4.  +------------------------------------------------------------------------------
  5.  * date:    2008-11-29
  6.  * author:  zbl
  7.  +------------------------------------------------------------------------------
  8.  **/
  9. class module{
  10.     function index() {
  11.         echo "This is index page";
  12.     }
  13.     function action() {
  14.         echo "This is action page";
  15.     }
  16. }
  1. /**
  2.  +------------------------------------------------------------------------------
  3.  * 入口文件index.php
  4.  +------------------------------------------------------------------------------
  5.  * date:    2008-11-29
  6.  * author:  zbl
  7.  +------------------------------------------------------------------------------
  8.  **/
  9. set_include_path(get_include_path().PATH_SEPARATOR.'common'.PATH_SEPARATOR.'lib');  //设定php.ini中的include_path路径
  10. include_once('function.php');
  11. include_once('module.php');
  12. url_rewrite();  //启动url rewrite
  13. $module = $_GET['module'];
  14. $action = $_GET['action'];
  15. if (class_exists($module) && method_exists($module$action)) { //检查类及方法是否存在
  16.     call_user_func(array($module$action));    //调用相应的类及方法进行处理
  17. else {
  18.     call_user_func(array('module''index'));   //当传入参数不正确的时候自动调用默认方法
  19. }

 

实现了基本的dispath,根据不同需求可在此基础上扩充。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值