一个简单的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 相关文章推荐
整理的9个实用的PHP库简介和下载
Nov 09 PHP
一个PHP分页类的代码
May 18 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
Yii2.0表关联查询实例分析
Jul 18 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 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
在PHP中使用灵巧的体系结构
2006/10/09 PHP
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
php curl 上传文件代码实例
2015/04/27 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
用Python配平化学方程式的方法
2019/07/20 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
工业设计专业推荐信
2013/10/29 职场文书
幼儿园园长岗位职责
2013/11/26 职场文书
阿德的梦教学反思
2014/02/06 职场文书
一月红领巾广播稿
2014/02/11 职场文书
质量月口号
2014/06/20 职场文书
护士节慰问信
2015/02/15 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
团干部培训班心得体会
2016/01/06 职场文书
各种货币符号快捷输入
2022/02/17 杂记
Golang 并发编程 SingleFlight模式
2022/04/26 Golang