2012-04-19 13 views
0

これが私のコードであるオートロードと呼び出し/私のクラスをインスタンス化し自動的にロードするクラス()

public function __get($name) 
{ 
    $classname = '\\System\\' . ucfirst($name); 

    if (property_exists($this, '_' . $name)) 
     $this->{'_' . $name} = new $classname(); 
    else 
     echo $name . ' isn\'t a valid property.'; 
} 


private function boot() 
{echo "<pre/>"; 
    spl_autoload_register(null, false); 

     if (function_exists('__autoload')) 
      spl_autoload_register('__autoload'); 

     spl_autoload_register(array($this, 'libraries')); 
var_dump($this->helper); 
     //$this->configuration(); 
} 

私は$this->helperを呼び出すと、私はだから私のこのエラーに

Fatal error: Call to a member function test() on a non-object in (...) 

を取得問題は、__get()メソッドが呼び出されたときにクラスがまだロードされているかどうかです。

そして、あなたのコードがやっているようはい、私のHelperクラスに

+0

これは、維持するために地獄にする必要があり、それが十分に成長したプロジェクトだとき。 –

答えて

0

存在しないtest()方法は、それは$this->_helper->test();する必要があります:$this->{'_' . $name} = new $classname();

あなたの魔法のメソッドが再インスタンス化するクラスのメソッドが呼び出されるたびにあります。あなたはそれが最初nullだ場合、それは確認しておく必要があります

if (property_exists($this, '_' . $name) && $this->{'_' . $name} !== null) 
+0

は 'is_null()'と同じ働きをしますか?プロパティがnullでない場合、インスタンス化したいからです。 – Eli

+0

はい、 'is_null'と同じ効果があります。 – webbiedave

関連する問題