<?php
class App {
protected $controller = \'Home\';
protected $method = \'index\';
protected $params = [];
public function __construct()
{
$url = $this->parseURL();
// controller
if(file_exists(\'../app/controllers/\' . $url[0] . \'.php\') ) {
$this->controller = $url[0];
unset($url[0]);
}
require_once \'../app/controllers/\' . $this->controller . \'.php\';
$this->controller = new $this->controller;
// method
if( isset($url[1]) ) {
if( method_exists($this->controller, $url[1]) ) {
$this->method = $url[1];
unset($url[1]);
}
}
//params
if( !empty($url) ) {
$this->params = array_values($url);
}
call_user_func_array($this->controller, $this->method, $this->params);
}
public function parseURL()
{
if( isset($_GET[\'url\']) ) {
$url = rtrim($_GET[\'url\'], \'/\');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode(\'/\', $url);
return $url;
}
}
}
最合适的回答,由SO网友:kero 整理而成
call_user_func_array($this->controller, $this->method, $this->params);
这个电话是错的,
check this example 在PHP官方文档中。您的代码应该如下所示:(对类方法使用数组语法)。
call_user_func_array([$this->controller, $this->method], $this->params);
// ^ ^