一.实现一个简单的URL到控制器方法的映射
1.index.php
:一些URL参数的获取及操作
<?php
// http://myphp.edu/0805/index.php/demo/getinfo?p=5&name=admin&leve=青铜
echo $_SERVER['PATH_INFO'], '<br>';
echo $_SERVER['REQUEST_URI'], '<br>';
//URL地址有些字符会转义成特殊符号
echo $_SERVER['QUERY_STRING'], '<br>';
echo "<hr>";
echo "将URL地址进行编码:".urlencode($_SERVER['QUERY_STRING']), '<br>';
echo "将URL地址进行解码:".urldecode($_SERVER['QUERY_STRING']), '<br>';
echo "<hr>";
// parse_url(): 解析URL的各个部分,并返回一个数组
print_r(parse_url(urldecode($_SERVER['REQUEST_URI'])));
echo "<hr>";
// pathinfo(): 返回当前脚本的路径信息,以数组方式
print_r(pathinfo(urldecode($_SERVER['REQUEST_URI'])));
echo "<hr>";
//parse_str(): $_SERVER['QUERY_STRING'],将查询字符串以数组的方式返回
parse_str($_SERVER['QUERY_STRING'],$arr);
print_r($arr);
echo "<hr>";
// http_build_query():使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串
echo http_build_query(['name'=>'admin', 'leve'=>'30', 'p'=>6]);
2.index1.php
:简单演示
<?php
http://myphp.edu/0805/index1.php/demo/getinfo/p/5/name/admin/leve/青铜
namespace MVCtest;
class DemoController
{
public function getinfo($p,$name,$leve){
return "用户:".$name.",等级:".$leve."当前处于第".$p."页";
}
}
$pathinfo = $_SERVER['PATH_INFO'];
$pathinfo = array_values(array_filter(explode("/",$pathinfo)));
var_dump($pathinfo);
echo "<hr>";
// array_filter():过滤掉空元素,返回数组
// $con = array_filter(explode("/",$pathinfo));
// array_values():将数据键名重置,从0开始,返回数组
// $con=array_values($con);
// array_shift():函数删除(取出)数组中第一个元素,并返回被删除(取出)元素的值
// array_pop():删除(取出)数组中的最后一个元素
// ucfirst():把字符串中的首字符转换为大写。
//综合写法:获取控制器(类名)
$controller = __NAMESPACE__."\\".ucfirst(array_shift($pathinfo))."Controller";
echo $controller,"<hr>";
//方法
$action = array_shift($pathinfo);
echo $action,"<hr>";
//参数
var_dump($pathinfo);
echo"<hr>";
$data = [];
for($i=0;$i <count($pathinfo);$i+=2){
if(isset($pathinfo[$i+1]))
{
$data[$pathinfo[$i]]=$pathinfo[$i+1];
}
}
var_dump($data);
echo"<hr>";
//客户端调用
// 1.直观调用
echo (new $controller())->$action($data['p'],$data['name'],$data['leve']),"<br>";
// 2.常用调用
// call_user_func_array(callable $callback , array $param_arr) : 调用回调函数,并把一个数组参数作为回调函数的参数,把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。
// call_user_func(参数一):作用与call_user_func_array一样
echo call_user_func_array([(new $controller),$action],$data);