2016-09-19 14 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(); 
関連する問題