您的位置:首页 > 编程语言 > PHP开发

PHP Dispath的实现思路及代码

2008-12-08 17:11 447 查看
url_rewrite函数的实现基本思路是:

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

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

/**

+------------------------------------------------------------------------------

* url重写实现函数 function.php

+------------------------------------------------------------------------------

* date: 2008-11-29

* author: zbl

+------------------------------------------------------------------------------

**/

function url_rewrite(){

if (isset( $_SERVER['PATH_INFO'])){

$url = substr($_SERVER['PATH_INFO'] , 1); //url提交的参数部分,去掉'/'

$url = explode(':', $url ); //以':'分割存放在数组中$url中

foreach ($url as $key => $value){

if ($key == 0){ //判断参数名

if ($value != '') {

$_GET ['module'] = $url[$key]; //将值存入$_GET数组中

}

$querystring[] = 'module='.$url[$key]; //组合参数名及值

} else {

if ($value != '') {

$_GET['action'] = $url[$key];

}

$querystring[] = 'action='.$url[$key];

}

}

$_SERVER['QUERY_STRING'] = implode("&", $querystring); //将组合后的字符串存入预定义变量$_SERVER['QUERY_STRING']中

$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; //将完整的url地址存入预定义变量$_SERVER['REQUEST_URI']中

}

}

/**

+------------------------------------------------------------------------------

* 类文件module.php

+------------------------------------------------------------------------------

* date: 2008-11-29

* author: zbl

+------------------------------------------------------------------------------

**/

class module{

function index() {

echo "This is index page";

}

function action() {

echo "This is action page";

}

}

/**

+------------------------------------------------------------------------------

* 入口文件index.php

+------------------------------------------------------------------------------

* date: 2008-11-29

* author: zbl

+------------------------------------------------------------------------------

**/

set_include_path(get_include_path().PATH_SEPARATOR.'common'.PATH_SEPARATOR.'lib'); //设定php.ini中的include_path路径

include_once('function.php');

include_once('module.php');

url_rewrite(); //启动url rewrite

$module = $_GET['module'];

$action = $_GET['action'];

if (class_exists($module) && method_exists($module, $action)) { //检查类及方法是否存在

call_user_func(array($module, $action)); //调用相应的类及方法进行处理

} else {

call_user_func(array('module', 'index')); //当传入参数不正确的时候自动调用默认方法

}

实现了基本的dispath,根据不同需求可在此基础上扩充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: