一个简单的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 相关文章推荐
计数器详细设计
Oct 09 PHP
PHP的ASP防火墙
Oct 09 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
WordPress判断用户是否登录的代码
Mar 17 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 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
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
使用PHP开发留言板功能
2019/11/19 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
javascript中的隐式调用
2018/02/10 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python中关键字is与==的区别简述
2014/07/31 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python 内置函数complex详解
2016/10/23 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
Python统计单词出现的次数
2018/04/04 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
【python】matplotlib动态显示详解
2019/04/11 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
python模拟斗地主发牌
2020/04/22 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
致长跑运动员广播稿
2014/01/31 职场文书
信用卡工资证明格式
2014/09/13 职场文书
赡养老人协议书范本
2015/08/06 职场文书