PHP url的pathinfo模式加载不同控制器的简单实现


Posted in PHP onAugust 12, 2016

使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式

文件结构:

|--Controller

|--Index

|--Index.php

|--Application.php

Application.php

<?php
class Application{
  public static function main(){
    header("content-type:text/html;charset=utf-8");
    self::register();
    self::router();
  }
  public static function register(){
    spl_autoload_register("self::loadClass");
  }
  public static function loadClass($class){
    $class=str_replace('\\', '/', $class);
    $class="./".$class.".php";
    require_once $class;    
  }
  public static function router(){
    if(isset($_SERVER['PATH_INFO'])){
      $pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO']));
      for($i=1;$i<=count($pathinfo);$i++){
        $key=isset($pathinfo[$i]) ? $pathinfo[$i] : '';
        $value=isset($pathinfo[$i+1]) ? $pathinfo[$i+1] :"";
        switch ($i) {
          case 1:
            $_GET['m']=ucfirst($key);
            break;
          case 2:
            $_GET['c']=ucfirst($key);
            break;
          case 3:
            $_GET['a']=$key;
            break;
          default:
            if($i>3){
              if($i%2==0){
                $_GET[$key]=$value;
              }
            }
            break;
        }
      }
    }
    $_GET['m']=!empty($_GET['m']) ? ucfirst($_GET['m']) : 'Index';
    $_GET['c']=!empty($_GET['c']) ? ucfirst($_GET['c']) : 'Index';
    $_GET['a']=!empty($_GET['a']) ? $_GET['a'] : 'index';
    $class="\\Controller\\{$_GET['m']}\\{$_GET['c']}";
    $controller=new $class;
    $controller->$_GET['a']();
  }
}

Application::main();

\Controller\Index\Index.php

<?php
namespace Controller\Index;

use Service\User;
class Index{
  public function __construct(){
    echo "构造方法<br/>";
  }
  public function index(){
    new User();
    print_r($_GET);
  }
  public function login(){
    echo "login()";
  }
}

效果:

PHP url的pathinfo模式加载不同控制器的简单实现

以上这篇PHP url的pathinfo模式加载不同控制器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
php.ini中的request_order推荐设置
May 10 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
php单链表实现代码分享
Jul 04 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP实现简单用户登录界面
Oct 23 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 #PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 #PHP
总结PHP中DateTime的常用方法
Aug 11 #PHP
php使用curl详细解析及问题汇总
Aug 11 #PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 #PHP
示例详解Laravel重置密码代码重构
Aug 10 #PHP
修改Laravel5.3中的路由文件与路径
Aug 10 #PHP
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
php 文章调用类代码
2011/08/11 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
AJax面试题
2014/11/25 面试题
儿子婚宴答谢词
2014/01/09 职场文书
北京大学自荐信范文
2014/01/28 职场文书
学习两会精神心得范文
2014/03/17 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
白酒营销策划方案
2014/08/17 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
父亲去世追悼词
2015/06/23 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
创业计划书之美甲店
2019/09/20 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏