一个简单的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 25 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
mysql_num_rows VS COUNT 效率问题分析
Apr 23 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
PHP PDO数据库操作预处理与注意事项
Mar 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
js实现下一页页码效果
2017/03/07 Javascript
layui文件上传实现代码
2017/05/20 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
python分割和拼接字符串
2013/11/01 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
python中dir函数用法分析
2015/04/17 Python
Python找出9个连续的空闲端口
2016/02/01 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
求网格中的黑点分布
2013/11/06 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
办公室主任职责范文
2013/11/08 职场文书
会计系毕业求职信
2014/08/07 职场文书
创先争优活动心得体会
2014/09/04 职场文书
道德模范事迹材料
2014/12/20 职场文书
十佳少年事迹材料
2014/12/25 职场文书
python实现图片批量压缩
2021/04/24 Python
python实现过滤敏感词
2021/05/08 Python
Vue监视数据的原理详解
2022/02/24 Vue.js
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers