2016-09-19 2 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(); 
Смежные вопросы