PHP为什么我的扩展类中的globals数组是空的

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

在扩展类中获取全局数组时遇到问题。数组由使用url传递的参数填充

我得到我的网址,然后爆炸它。然后我将前两个参数设置为类和方法。然后重新设置数组键的基数,使参数从0开始

例如:

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));哪里至少在你尝试使用的方法中没有。