对于如何实现url访问php文件某个类的的方法,例如tp5框架路由访问,http://demo.php.com/index.php/test/read,
test是模块,read方法。index.php下面是代码:
<?php
//访问url http://demo.php.com/index.php/test/read
$uri = explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));//解析url,并且转为数组
//var_dump($uri);
$class = $uri[2];//默认index.php入口,所以选择2
$path = '/'.$class.'.class.php';
if(file_exists($path)) {//判断文件是否存在
require $path;
$object = new $class();//实例化
$action = !empty($uri[3])?$uri[3] : 'index';//判断是数组否存在
if(method_exists($object,$action)) {//判断该类方法是否存在
$parameter = !empty($uri[4])?$uri[4] : 'null';
call_user_func_array(array($object, $action), array($parameter)); //调用对象里的方法并传参,call_user_func_array调用回调函数
} else {
echo "{$class}模块下不存在{$action}方法";
}
} else {
echo "{$class}模块不存在";
}
test.class.php文件代码:
class test
{
public function index()
{
echo 'hello,word!';
}
public function read()
{
$arr = array(
'0'=>array('id'=>1,'name'=>'tim'),
'1'=>array('id'=>2,'name'=>'jike'),
'3'=>array('id'=>3,'name'=>'蔡虚坤')
);
var_dump($arr);
}
}
文件结构如图:
关键用到的函数:
call_user_func_array()这个函数可以实现回调函数,有个函数 call_user_func()功能类似类似 call_user_func_array(array($object, $action), array($parameter)) $object 类的实例,$action类的方法 $parameter url的一些参数