一个简单的php路由类


Posted in PHP onMay 29, 2016

本文实例为大家分享了php编写一个简单的路由类,供大家参考,具体内容如下

<?php
namespace cmhc\Hcrail;
 
class Hcrail
{
 
  /**
   * callback function
   * @var callable
   */
  protected static $callback;
 
  /**
   * match string or match regexp
   * @var string
   */
  protected static $match;
 
  protected static $routeFound = false;
 
  /**
   * deal with get,post,head,put,delete,options,head
   * @param  $method
   * @param  $arguments
   * @return
   */
  public static function __callstatic($method, $arguments)
  {
    self::$match = str_replace("//", "/", dirname($_SERVER['PHP_SELF']) . '/' . $arguments[0]);
    self::$callback = $arguments[1];
    self::dispatch();
    return;
  }
 
  /**
   * processing ordinary route matches
   * @param string $requestUri
   * @return
   */
  public static function normalMatch($requestUri)
  {
    if (self::$match == $requestUri) {
      self::$routeFound = true;
      call_user_func(self::$callback);
    }
    return;
  }
 
  /**
   * processing regular route matches
   * @param string $requestUri
   * @return
   */
  public static function regexpMatch($requestUri)
  {
    //处理正则表达式
    $regexp = self::$match;
    preg_match("#$regexp#", $requestUri, $matches);
    if (!empty($matches)) {
      self::$routeFound = true;
      call_user_func(self::$callback, $matches);
    }
    return;
  }
 
  /**
   * dispatch route
   * @return
   */
  public static function dispatch()
  {
    if (self::$routeFound) {
      return ;
    }
    $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $requestMethod = $_SERVER['REQUEST_METHOD'];
 
    if (strpos(self::$match, '(') === false) {
      self::normalMatch($requestUri);
    } else {
      self::regexpMatch($requestUri);
    }
 
  }
 
  /**
   * Determining whether the route is found
   * @return boolean
   */
  public static function isNotFound()
  {
    return !self::$routeFound;
  }
 
}

下载地址:https://github.com/cmhc/Hcrail

希望本文所述对大家学习PHP程序设计有所帮助。

PHP 相关文章推荐
PHP安全配置
Oct 09 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
php实现简单文件下载的方法
Jan 30 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
PHP解决高并发的优化方案实例
Dec 10 PHP
解读PHP中上传文件的处理问题
May 29 #PHP
round robin权重轮循算法php实现代码
May 28 #PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 #PHP
php获取一定范围内取N个不重复的随机数
May 28 #PHP
smarty的section嵌套循环用法示例
May 28 #PHP
PHP引用返回用法示例
May 28 #PHP
php时间函数用法分析
May 28 #PHP
You might like
PHP 多维数组排序实现代码
2009/08/05 PHP
PHP速成大法
2015/01/30 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP7匿名类用法分析
2016/09/26 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
js实现自定义路由
2017/02/04 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
东方电视购物:东方CJ
2016/10/12 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
师范生实习的个人自我鉴定
2013/10/20 职场文书
自荐书模板
2013/12/19 职场文书
产品质量承诺书
2014/03/27 职场文书
化妆品活动策划方案
2014/05/23 职场文书
励志演讲稿200字
2014/08/21 职场文书
工会经费申请报告
2015/05/15 职场文书
邹越演讲观后感
2015/06/15 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python
MySQL新手入门进阶语句汇总
2022/09/23 MySQL