批改状态:合格
老师批语:这个简单的案例, 可以让我们快速理解路由的原理
示例
<?phpnamespace Url;class MyurlController{public function index(){return '调用了index方法!';}}// $pathinfo = explode('/',$_SERVER['PATH_INFO']);// //PATH_INFO取出网址/admin/admin888/action/index用explode转为数组// $pathinfo = array_filter($pathinfo);// //array_filter过滤数组中的空值// $pathinfo = array_values($pathinfo);// //array_values对数组从0重新排列$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));// 将网址转换返回一个数组// $pathinfo = array_pop($pathinfo);// 取出数组最后一个键值// $pathinfo =array_slice($pathinfo,-2,1);//array_slice取出数组中倒数第二键值,参数1:数组,参数2:取出的位置,参数3:取出几个值// $pathinfo = array_shift($pathinfo);//取出数组的值// $pathinfo = ucfirst($pathinfo);//ucfirst将键值第一个字母转换大写$pathinfo = ucfirst(array_shift(array_slice($pathinfo,-2,1)));//取出网址中的myurl将首字母转换大写$controller = __NAMESPACE__.'\\'.$pathinfo.'Controller';//取出的网址数组中的值和命名空间作为调用的类(生成解析控制器的类名称)$action = array_pop(explode('/',$_SERVER['PATH_INFO']));//取出网址数组中最后一个值,作为调用的方法(生成解析控制器的类方法)echo (new $controller)->$action();//使用生成的控制器类名称及方法调用类
示例图:
示例:
<?phpnamespace Url;class Myurl{public function index($id,$name,$age,$mobile){return '您的ID是:'.$id.'您的用户名是:'.$name.'您的年龄是:'.$age.'您的手机是:'.$mobile;}}$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));$controller = __NAMESPACE__ .'\\'.ucfirst(array_shift($pathinfo));$action = array_shift($pathinfo);// print_r($pathinfo);$params =[];for($i = 1 ; $i < count($pathinfo);$i+=2){$params[$pathinfo[$i]] = $pathinfo[$i];}echo call_user_func_array([(new $controller),$action],$params);、
示例图:
<?phpnamespace Url;class MyurlController{public $pathinfoClass;public $pathinfoMethod;public $params = [];public function index($id,$name,$age,$mobile){return 'Url传值无键调用类:用户ID:'.$id.' 用户姓名:'.$name.' 用户年龄:'.$age.' 用户手机:'.$mobile;}public function getClass($pathinfo){$this->pathinfoClass = array_shift(array_splice($pathinfo,-2,1));$this->pathinfoClass = __NAMESPACE__.'\\'. ucfirst($this->pathinfoClass).'Controller';return $this->pathinfoClass;}public function getMethod($pathinfo){$this->pathinfoMethod = array_pop($pathinfo);return $this->pathinfoMethod;}public function getDate($pathinfo){$pathinfo =array_slice($pathinfo,0,4);for($i = 0 ;$i < count($pathinfo);$i++){$this->params[$pathinfo[$i]] = $pathinfo[$i];}return $this->params;}}$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));$pathinfoClass = (new MyurlController)->getClass($pathinfo);$pathinfoMethod = (new MyurlController)->getMethod($pathinfo);$params =(new MyurlController)->getDate($pathinfo);echo call_user_func_array([(new $pathinfoClass),$pathinfoMethod],$params);
示例图:

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