一个简单的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读写文件的方法(生成HTML)
Nov 27 PHP
PHP添加MySQL数据记录代码
Jun 07 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
linux中cd命令使用详解
Jan 08 PHP
php实现CSV文件导入和导出
Oct 24 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
PHP网页安全认证的实例详解
Sep 28 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
一个程序下载的管理程序(二)
2006/10/09 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php 使用array函数实现分页
2015/02/13 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP与以太坊交互详解
2018/08/24 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python处理文本换行符实例代码
2018/02/03 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
两只小狮子教学反思
2014/02/05 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
干部鉴定材料
2014/05/18 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
进行数据处理的6个 Python 代码块分享
2022/04/06 Python