一个简单的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
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php阻止页面后退的方法分享
Feb 17 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 PHP
PHP扩展安装方法步骤解析
Nov 24 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实现单链表的实例代码
2013/03/22 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
python修改字典内key对应值的方法
2015/07/11 Python
Python中如何获取类属性的列表
2016/12/26 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
简单的Python调度器Schedule详解
2019/08/30 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
优秀女职工事迹材料
2014/02/06 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书