一个简单的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 相关文章推荐
WINXP下apache+php4+mysql
Nov 25 PHP
一段防盗连的PHP代码
Dec 06 PHP
adodb与adodb_lite之比较
Dec 31 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
php适配器模式介绍
Aug 14 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
详解使用php-cs-fixer格式化代码
Sep 16 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-MySQL教程归纳总结
2008/06/07 PHP
php minixml详解
2008/07/19 PHP
php debug 安装技巧
2011/04/30 PHP
php 安全过滤函数代码
2011/05/07 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
php DES加密算法实例分析
2019/09/18 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
JSONP基础知识详解
2017/03/19 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
python多进程控制学习小结
2018/10/31 Python
python学习开发mock接口
2019/04/28 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
经理助理岗位职责
2014/03/05 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
文化大革命观后感
2015/06/17 职场文书
vue特效之翻牌动画
2022/04/20 Vue.js