一个简单的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常用代码
Nov 23 PHP
介绍几个array库的新函数 php
Dec 29 PHP
php 中文处理函数集合
Aug 27 PHP
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
php分页代码学习示例分享
Feb 20 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP实现简易计算器功能
Aug 28 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
php读取excel文件的简单实例
2013/08/26 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
前端必学之PHP语法基础
2016/01/01 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
js 幻灯片的实现
2011/12/06 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
VUE 全局变量的几种实现方式
2018/08/22 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
详解如何运行vue项目
2019/04/15 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
python 中split 和 strip的实例详解
2017/07/12 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
python 实现list或string按指定分段
2019/12/25 Python
浅谈Python 参数与变量
2020/06/20 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers