Что можно улучшить или удалить в данном классе?

Пишу свой маршрутизатор для личной платформы, пока сделал основную часть, сижу и понимаю что сделал не совсем правильно и местами где-то допустил ошибки.

Пример маршрутизации:

try{
        $Router->GET("/", function(){
            echo "Home page!";
        });
        
        $Router->GET("/about/", function(){
            echo "About page!";
        });
        
        $Router->GET("/about/{username:[0-9a-zA-Z-_]}", function($username){
           echo $username;
        });
        
        $Router->Run();
        
    }catch(Exception $e){
        DebugMaster::ExceptionHandler($e);
    }

Сам класс:

<?php

    class Router{
        
        private $routes = array();
        private $validRoutes = array();
        private $boolEndSlash = true;
        
        public function GetRoutes(){
            return $this->routes;
        }
        
        public function GetValideRoutes(){
            return $this->validRoutes;
        }
        
        public function Route($METHODS, $URI, $CALLABLE){
            $levels = explode("/", $URI);
    
            $string = "/";
            $params = array();
            foreach ($levels as $level){
                if(!empty($level)){
                    if(preg_match("/{(?<name>.*):(?<regex>.*)}/U", $level, $matches)){
                        $params["_".$matches["name"]]=$matches["regex"];
                        $string .= trim("(?<_".$matches["name"]. ">.*)/", ' ');
                    }else{
                        $string .= $level."/";
                    }
                }
            }
            $string = "/".str_replace("/", "\/", $string)."/U";
            $this->routes[implode(',', $METHODS).":".$URI] = array(
                "METHOD" => $METHODS,
                "URI" => $URI,
                "REGEX" => $string,
                "PARAMS_REGEXES" => $params,
                "CALLABLE" => $CALLABLE,
            );
        }
        
        public function GET($URI, $CALLABLE){
            $this->Route(["GET"], $URI, $CALLABLE);
        }
        public function POST($URI, $CALLABLE){
            $this->Route(["POST"], $URI, $CALLABLE);
        }
        
        
        public function Run(){
            $REQUEST_METHOD = $_SERVER["REQUEST_METHOD"];
            $REQUEST_URI = $_SERVER["REQUEST_URI"];
            
            foreach($this->routes as $name => $route){
                $validRoute=$route;
                if(isset($this->validRoutes[$name])){
                    throw new ErrorException("Duplicate route found - ".$name);
                }elseif($validRoute["URI"] == $REQUEST_URI){
                    $this->validRoutes[$name]=$validRoute;
                }else{
                    preg_match($route["REGEX"], $REQUEST_URI, $matches);
                    if(isset($matches[0])){
                        $uriParse = $matches[0];
                        $params = simpleArrayResortNonNumeric($matches);
                        if($REQUEST_URI == $uriParse){
                            foreach($params as $param_name => $param_value){
                                preg_match("/.*".$route["PARAMS_REGEXES"][$param_name]."/", $param_value, $matches);
                                if(isset($matches[0])){
                                    if($matches[0] == $param_value){
                                        $validRoute["PARAMS"][substr($param_name, 1)]=$param_value;
                                    }else{
                                        throw new ErrorException("BAD REGEX ON PARAM: " . $param_name. " = ". $param_value. " || ".$validRoute["PARAMS_REGEXES"][$param_name]);
                                    }
                                }else{
                                    throw new ErrorException("BAD REGEX ON PARAM: " . $param_name. " = ". $param_value. " || ".$validRoute["PARAMS_REGEXES"][$param_name]);
                                }
                            }
                            $this->validRoutes[$name]=$validRoute;
                        }
                    }
                }
            }
            
            if(count($this->validRoutes) == 0){
                echo "404, page not found";
            }elseif(count($this->validRoutes) > 1){
                echo "500, bad routes";
            }elseif(count($this->validRoutes)==1){
                if(isset($this->validRoutes[key($this->validRoutes)]["PARAMS"])){
                    if(count($this->validRoutes[key($this->validRoutes)]["PARAMS"])>0){
                        call_user_func_array($this->validRoutes[key($this->validRoutes)]["CALLABLE"], $this->validRoutes[key($this->validRoutes)]["PARAMS"]);
                    }else{
                        call_user_func($this->validRoutes[key($this->validRoutes)]["CALLABLE"]);
                    }
                }else{
                    call_user_func($this->validRoutes[key($this->validRoutes)]["CALLABLE"]);
                }
            }
        }
    }

?>

Добавлять HTTP-методы и методы для работы с API буду позже, сейчас просто хочу довести до ума.


Ответы (0 шт):