php教程

超轻量级php框架startmvc

一个简单的php路由类

更新时间:2020-03-09 10:17:50 作者:startmvc
本文实例为大家分享了php编写一个简单的路由类,供大家参考,具体内容如下<?phpnamesp

本文实例为大家分享了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 路由类