2016-09-19 66 views
1

我在PHP中使用名称空间,并试图动态加载类。我目前的结构是这样的:带有名称空间的PHP动态类加载

class Bootstrap { 

    protected $controller = 'home'; 

    protected $method = 'index'; 

    protected $params = []; 

    function __construct($url) { 
     $urlArray = $this->parseurl($url); 
     if(file_exists('../app/http/controllers/' . $urlArray[0] . '.php')) 
     { 
      $this->controller = $urlArray[0]; 
      unset($urlArray[0]); 
     } 

     require_once '../app/http/controllers/' . $this->controller . '.php'; 

     $this->controller = new Controllers\$this->controller; 

     var_dump($this->controller); 
    } 
    public function parseurl($url) { 
     return $url = explode('/', filter_var(rtrim($url, '/'), FILTER_SANITIZE_URL)); 
    } 
} 

我得到的错误是:

解析错误:语法错误,意外 '$这一'(T_VARIABLE),预计标识符(T_STRING)

我该如何做到这一点,所以我可以加载这个引导功能的类?

回答

0

以下行:

$this->controller = new Controllers\$this->controller; 

是无效的PHP代码。

如果需要使用动态类名来实例化类,使用一个中间变量:

$className = 'Controllers\\' . $this->controller; 
$this->controller = new $className(); 
+0

的感谢!愚蠢地忽​​略了这一点,它现在起作用了! – Ari

0

这应该工作:

$controller = 'Controllers\'.$this->controller; 
$this->controller = new $controller();