PHP为什么我的扩展类中的globals数组是空的
在扩展类中获取全局数组时遇到问题。数组由使用url传递的参数填充 我得到我的网址,然后爆炸它。然后我将前两个参数设置为类和方法。然后重新设置数组键的基数,使参数从0开始 例如:PHP为什么我的扩展类中的globals数组是空的,php,arrays,globals,Php,Arrays,Globals,在扩展类中获取全局数组时遇到问题。数组由使用url传递的参数填充 我得到我的网址,然后爆炸它。然后我将前两个参数设置为类和方法。然后重新设置数组键的基数,使参数从0开始 例如: class App { protected $controller = ''; protected $method = ''; protected $param = []; public function init() { if (isset($_GET['url
class App
{
protected $controller = '';
protected $method = '';
protected $param = [];
public function init()
{
if (isset($_GET['url'])) {
$url = explode('/', filter_var(trim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
else
{
header('Location: /home');
}
if (file_exists(APP . '/controllers/' . $url[0] . '.php'))
{
$this->controller = $url[0];
unset($url[0]);
}
else
{
if (DEVELOPMENT == true) {
var_dump($url);
}
else
{
header('Location: /home');
}
}
require_once 'controllers/' . $this->controller . '.php';
$className = ucfirst($this->controller);
$class = new $className;
if (isset($url[1]))
{
if (method_exists($className, $url[1]))
{
$this->method = $url[1];
unset($url[1]);
$methodName = $this->method;
$class->$methodName();
}
}
$GLOBALS['param'] = array_values($url);
}
public function view($view)
{
require_once VIEW . '/header.htm';
require_once VIEW . '/' . $view . '.htm';
require_once VIEW . '/footer.htm';
}
}
所以,如果我的url是site/class/method/foo/bar,并且我转储$GLOBALS['param'],我得到
array (size=2)
0 => string 'foo' (length=3)
1 => string 'bar' (length=3)
这很好,也是我想要的
但是,如果我在扩展类上执行相同的转储
class User extends App
{
public function __construct()
{
var_dump($GLOBALS['param']);
}
}
我的数组是空的。实际上,我试图做的是能够从任何控制器类中的url获取参数并使用它们。我怎么能那样做呢?我太离谱了。我修复了我的问题,将参数解析为call_user_func_数组的方法,如下所示
class App
{
protected $controller = 'home';
protected $method = 'index';
protected $params = [];
public function init()
{
$url = $this->parseUrl();
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;
if (isset($url[1]))
{
if (method_exists($this->controller, $url[1]))
{
$this->method = $url[1];
unset($url[1]);
}
}
$this->params = $url ? array_values($url) : [];
// Parse params to method
call_user_func_array([$this->controller, $this->method], $this->params);
}
public function parseUrl()
{
if (isset($_GET['url']))
{
return $url = explode('/', filter_var(trim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
}
public function view($view)
{
require_once VIEW . '/header.htm';
require_once VIEW . '/' . $view . '.htm';
require_once VIEW . '/footer.htm';
}
}
然后我可以在扩展类中获取参数
class User extends App
{
public function index($var = '', $otherVar = '')
{
echo $var. $otherVar;
}
public function register()
{
$this->view('user-register');
}
public function login()
{
$this->view('user-login');
}
}
你真的需要用它来代替地球人知道的!我是说我知道我用globals做的不对。然而,我仍然在学习,依赖注入仍然让我感到困惑。如果问题不太多,你介意贴一个与我的情况相关的例子吗?抱歉,我的学习速度很慢。你从哪里得到
$url
?我做这个$url=explode('/',filter\u var(trim($\u get['url'],'/'),filter\u SANITIZE\u url));哪里至少在你尝试使用的方法中没有。