一个简单的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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
坏狼的PHP学习教程之第2天
Jun 15 PHP
php变量范围介绍
Oct 15 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
php 获取xml接口数据的处理方法
May 31 PHP
PHP实现字母数字混合验证码功能
Jul 11 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 PHP
PHP数组array类常见操作示例
May 15 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处理密码的几种方式
2016/11/30 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
php实现文件上传基本验证
2020/03/04 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
Javascript 陷阱 window全局对象
2008/11/26 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jquery实现聚光灯效果的方法
2015/02/06 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
详解Python中的各种函数的使用
2015/05/24 Python
python如何实现反向迭代
2018/03/20 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
Python标准库itertools的使用方法
2020/01/17 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
职称自我鉴定
2013/10/15 职场文书
学期自我鉴定
2013/11/04 职场文书
质量月口号
2014/06/20 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
MySQL的索引你了解吗
2022/03/13 MySQL
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript