批改状态:合格
老师批语:一个真实的路由比这个复杂得多,但思路是一样的
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:简单演示
<?phphttp://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);

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号