一个简单的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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
php二维数组转成字符串示例
Feb 17 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
php实现简单文件下载的方法
Jan 30 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
php实用代码片段整理
Nov 12 PHP
php实现微信支付之现金红包
May 30 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 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
mysql5详细安装教程
2007/01/15 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
js实现点击烟花特效
2020/10/14 Javascript
Python字符串替换实例分析
2015/05/11 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
selenium+python环境配置教程详解
2019/05/28 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
网络安全类面试题
2015/08/01 面试题
2015公务员年度考核评语
2015/03/25 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript