2012-04-19 126 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()方法時,這些類是否仍在加載?

是的,test()確實的方法,我Helper

+0

這一定是地獄維持,當它是一個完全成熟的項目。 – 2012-04-19 21:50:52

回答

0

存在應該$this->_helper->test();爲你的代碼是這樣做的:$this->{'_' . $name} = new $classname();

你的魔術方法會在每次調用時重新實例化類。你應該有它檢查它是否是null第一:

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

會'is_null()'工作一樣嗎?因爲我想實例化,如果屬性不是空的權利? – Eli 2012-04-19 22:16:10

+0

是的,'is_null'具有相同的效果。 – webbiedave 2012-04-19 22:36:57