一个简单的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 相关文章推荐
一键删除顽固的空文件夹 软件下载
Jan 26 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
php变量与字符串的增删改查操作示例
May 07 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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
浅析ThinkPHP的模板输出功能
2014/07/01 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
详解python做UI界面的方法
2019/02/27 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
python开发前景如何
2020/06/11 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
运动会领导邀请函
2014/02/05 职场文书
文明市民先进事迹
2014/05/15 职场文书
管理标语大全
2014/06/24 职场文书
大学生简历求职信
2014/06/24 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
小学生毕业评语
2014/12/26 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书