我做了一个类似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()不应在其中静态调用