一个简单的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类
Apr 09 PHP
CodeIgniter php mvc框架 中国网站
May 26 PHP
php URL编码解码函数代码
Mar 10 PHP
PHP学习笔记之一
Jan 17 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
PHP修改session_id示例代码
Jan 08 PHP
php实现加减法验证码代码
Feb 14 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
试用php中oci8扩展
Jun 18 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 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中strlen和mb_strlen函数的区别
2014/03/07 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python装饰器用法实例总结
2018/05/26 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
python unichr函数知识点总结
2020/12/16 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
银行职员思想汇报
2013/12/31 职场文书
小学教师自我评价
2015/03/04 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
vue封装数字翻牌器
2022/04/20 Vue.js