一个简单的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的curl实现get和post的代码
Aug 23 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
php命名空间学习详解
Feb 27 PHP
php使用codebase生成随机数
Mar 25 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
CI框架简单邮件发送类实例
May 18 PHP
Yii框架分页技术实例分析
Aug 30 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python线性回归实战分析
2018/02/01 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
浅析python中的del用法
2020/09/02 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
体育专业个人求职信范文
2013/12/27 职场文书
年度考核自我鉴定
2014/02/02 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
运动会方队口号
2014/06/07 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
课程设计的心得体会
2014/09/03 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
Python简易开发之制作计算器
2022/04/28 Python