一个简单的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的declare控制符和ticks教程(附示例)
Mar 21 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
yii2安装详细流程
May 23 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
php解决安全问题的方法实例
Sep 19 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 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 默默经典版本
2009/08/04 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
原生JS和JQuery动态添加、删除表格行的方法
2015/05/28 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
详解如何用babel转换es6的class语法
2018/04/03 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python定时器(Timer)用法简单实例
2015/06/04 Python
python测试mysql写入性能完整实例
2018/01/18 Python
Python随机函数random()使用方法小结
2018/04/29 Python
实践Vim配置python开发环境
2018/07/02 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
门卫工作岗位职责
2013/12/17 职场文书
自主招生自荐信格式
2015/03/04 职场文书
升职自荐信范文
2015/03/27 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python