不推荐使用:非静态方法。如何在路由类中将其分开?

时间:2019-04-13 18:18:09

标签: php oop

我做了一个类似Laravel的路由系统。路由作为超级。但是,当我调用控制器时,出现了不推荐使用:非静态方法错误。如何防止此错误?我做了很多实验,但找不到解决方法。

class Router {

    protected static $url;
    protected $callback, $params;

    public function __construct($url) {

        if(!empty($url)) {
            self::$url = trim('/', $url);
        }

        if(!function_exists('view')) {
            function view($parameters, $var = []) {
                restore_include_path();
                Blade::addPath(VIEW_DIR);
                print Blade::render($parameters , $var);
            }
        }
    }

    public static function currentURL() {
        return $_SERVER['REQUEST_URI'];
    }

    public static function mainRouter($url, $callback) {

        $url = preg_replace('/\{(.*?)\}/', '(.*)', $url);

        if(preg_match('@^'.$url.'$@', self::currentURL(), $parameters)) {

            unset($parameters[0]);

            if(gettype($callback) == 'object') {
                call_user_func_array($callback, $parameters);
            }

            if(gettype($callback) == 'string') {
                if(is_array(explode('@', $callback))) {
                    list($control, $method) = explode('@', $callback);
                    if(file_exists(CONTROLLER_DIR . $control . '.php')) {
                        call_user_func_array(['App\\Controller\\'.$control, $method], $parameters);
                    }
                }
            }
        }
    }

    public static function get($url, $callback){
        if ($_SERVER['REQUEST_METHOD'] == strtoupper(__FUNCTION__)) {
            $url = addslashes(strip_tags($url));
            Router::mainRouter($url, $callback);
        }
    }
}

路由

    Router::get('/b/{name}', 'HomeController@index'); // faulty part

    Router::get('/a/{name}', function ($name) {
        return view('index'); // Works perfect
    });

控制器

class HomeController {

    public function index($name) {
        echo Controller::view('index');
    }

}

传入错误

不建议使用:非静态方法App \ Controller \ HomeController :: index()不应在其中静态调用

0 个答案:

没有答案