解刨mvc中pathinfo路由解析原理
利用超全局函数拿到数组拿到的值,对值进行操作,操作后映射到方法中,
解析http ://*.com/demo1.php/user/index/id/1/name/user
代码部分:

  1. <?php
  2. namespace mvc;
  3. class User
  4. {
  5. function index($id, $name)
  6. {
  7. return "您好{$name},您的id是$id";
  8. }
  9. }
  10. // echo (new User)->index(1, 'pt');
  11. // var_dump($_SERVER['PATH_INFO']);
  12. // array_filter去除空字符 array_values将数组重新排序
  13. $res = array_values(array_filter(explode("/", $_SERVER['PATH_INFO'])));
  14. // var_dump($res);
  15. $controller = __NAMESPACE__ . '\\' . array_shift($res);
  16. //下面是方法名
  17. var_dump($controller);
  18. $method = array_shift($res);
  19. // 下面是控制器名
  20. var_dump($method);
  21. var_dump($res);
  22. // $params = ['id' => 1, 'name' => 'peter'];
  23. // i等于0的时候 i自增0+2赋值给i i等于2,
  24. for ($i = 0; $i < count($res); $i += 2) {
  25. // array(4) {
  26. // [0]=>
  27. // string(2) "id"
  28. // [1]=>
  29. // string(1) "1"
  30. // [2]=>
  31. // string(4) "name"
  32. // [3]=>
  33. // string(4) "user"
  34. // }
  35. // 解释下下面,丫的 刚刚差点没理解 for是从0开始进入的 妈的 这一个点让我头疼了半天
  36. // 第一次进来是$params[$res[$i]]是0 $res[$i + 1];为1,因为是从0开始的
  37. // 第二次进来 i就是2了 $params[$res[$i]]就是2了 , $res[$i + 1];就是3
  38. $params[$res[$i]] = $res[$i + 1];
  39. }
  40. // for上面实现的,下面是foreach实现的
  41. var_dump($params); //这里的params跟下面的ress都是一个数组,随便用...
  42. foreach ($res as $key => $value) {
  43. $ress['id'] = $res['1'];
  44. $ress['name'] = $res['3'];
  45. }
  46. var_dump($ress);
  47. // 第一种解决方法
  48. // $au = (new User)->index($ress['id'], $ress['name']);
  49. // var_dump($au);
  50. // 第二种回调的解决方法
  51. $ca = call_user_func_array([(new $controller), $method], [$ress['id'], $ress['name']]);
  52. // call_user_func_array 回调函数第一个值可以是一个数组,数组内第一个值是类名,第二个值是是类内的方法,第二个值是给第一个值注入的参数
  53. // 在没有类的情况下,第一个值就是一个方法,并且支持引用传递
  54. echo $ca;
  55. //上面是将api地址解析成数组
  56. //示例网址http://1.com/demo1.php/user/index/id/1/name/user

第二种,get方式传参,路由地址为/url/index?id=6&name=peter格式的

代码部分:

  1. <?php
  2. namespace mvc;
  3. class url
  4. {
  5. public function index($name, $id)
  6. {
  7. return "当前用户为" . $name . '.' . '当前用户的id为' . $id;
  8. }
  9. }
  10. var_dump($_SERVER['REQUEST_URI']);
  11. $url = $_SERVER['REQUEST_URI'];//获取到路由的地址
  12. $urlarr = parse_url($url);//将路由地址转数组
  13. var_dump($urlarr['query']);
  14. parse_str($urlarr['query'], $xarr);//将需要的get部分的路由地址转数组
  15. var_dump($xarr);
  16. echo (new url)->index($xarr['name'], $xarr['id']);//传值
  17. // 上面是将1.com/demo2.php/url/index?id=6&name=peter 中的id=6&name=peter转换成数组

更多相关文章

  1. Android(安卓)Drawable 和String 相互转化
  2. android 层叠图片形成一张图片
  3. Android(安卓)InputStream与String,Byte之间互转
  4. php变量的8种类型. 遍历php多维数组(foreach与for) 一个函数完成购
  5. php变量的种类与购物车
  6. PDO数据库的链接,PDO防mysql数据库预处理机制。以及使用pdo对数据
  7. array_values()在php中返回数组的操作实例
  8. php变量的8种类型 遍历php多维数组(foreach与for) 一个函数完成购
  9. 闭包、访问器属性、类与对象的创建与成员引用、数组与对象的解构

随机推荐

  1. android就一定比java差?
  2. 安卓(android)开发应该怎么学?需要哪些基础
  3. Android/OPhone开发完全讲义(china-pub首
  4. 豪赌Web apps,谷歌Chrome开发工具直通Andr
  5. android 依赖冲突解决
  6. Android通讯录数据库介绍与基本操作(增删
  7. RxJava2+Retrofit2+okHttp的二次封装
  8. Android中的网络时间同步
  9. Android 简单热修复(上)——Java类加载器
  10. Android AutoLayout全新的适配方式 堪称