设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP简单实现路由Route功能

发布时间:2022-06-24 14:02 所属栏目:121 来源:互联网
导读:对于由原生PHP写成的独立PHP框架,利用单一入口文件实现路径的访问。这时我们会遇到的首要问题是:文件的相互包含,其次就是路由分配。当我们不利用成熟的PHP框架进行web开发时,我们就会发现上述两个问题会是很困扰我们的问题所在。 问题解决方案: 1、文件
  对于由原生PHP写成的独立PHP框架,利用单一入口文件实现路径的访问。这时我们会遇到的首要问题是:文件的相互包含,其次就是路由分配。当我们不利用成熟的PHP框架进行web开发时,我们就会发现上述两个问题会是很困扰我们的问题所在。
 
  问题解决方案:
 
  1、文件包含
 
  php的文件包含有两种方式:require和include,两个方法的区别在于利用require包含文件当出错时,会报出严重错误,同时PHP脚本会停止运行;而利用include包含文件出错时,会有警告,但PHP脚本仍然会继续向下执行。同时两个方法都包含对应的xxx_once方法,可以避免”declare class”的问题。所以一般使用文件包含的时候我们尽量使用include_once包含文件。
 
  同时在关于文件包含的路径问题上,我们可以利用设置全局变量的方式,依托入口文件的绝对路径,去寻找其他路径文件。修改php.ini中的inclue_path路径当然也是另一种方式,利用require和include包含文件,假如是相对路径的方式,首先会根据php.ini配置文件中的include_path的设置寻找。
 
  2、路由分配
 
  基于php的路由分配,实质上来说就是利用url中的path去匹配对应的控制类,同时调用其中的方法进行相关操作的处理。
 
  一言不合上代码:
 
  <?php
  
  /**
  
   * Author:helen
  
   * CreateTime: 2016/07/27 10:26
  
   * Description:
  
   */
  
  // 权限控制
  
  include_once './auth.php';
  
  // 应用入口文件
  
  date_default_timezone_set("Asia/Shanghai");
  
  header('Content-type: text/html;charset=utf-8');
  
  // 项目根路径
  
  define('BASEPATH', dirname(__FILE__));
  
  // 调试模式
  
  define('APP_DEBUG', True);
  
  // 引入配置文件
  
  include_once BASEPATH . '/config/config.php';
  
  // 路由控制
  
  $router = include_once BASEPATH . '/config/router.php';
  
  if ($_SERVER['HTTP_HOST'] !== 'xxx.com') {
  
      var_dump('当前host不被允许');
  
  } else {
  
      $request_path = str_replace('/index.php', '', $_SERVER['PHP_SELF']);
  
      $request_query = getCurrentQuery();
  
      if (array_key_exists($request_path, $router)) {
  
          $module_file = BASEPATH . $router[$request_path]['file_name'];
  
          $class_name = $router[$request_path]['class_name'];
  
          $method_name = $router[$request_path]['method_name'];
  
          if (file_exists($module_file)) {
  
              include $module_file;
  
              $obj_module = new $class_name();
  
              if (!method_exists($obj_module, $method_name)) {
  
                  die("要调用的方法不存在");
  
              } else {
  
                  if (is_callable(array($obj_module, $method_name))) {
  
                      $obj_module->$method_name($request_query, $_POST);
  
                  }
  
              }
  
          } else {
  
              die("定义的模块不存在");
  
          }
  
      } else {
  
          echo '页面不存在';
  
      }
  
  }
  利用上述方式就可实现基本的PHP框架的路由分配。
 
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读