这是我自动加载和调用/实例化我的类的代码
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 :(得分:0)
您的代码应该是$this->_helper->test();
:$this->{'_' . $name} = new $classname();
你的魔法在每次调用时都会重新实例化。您应该首先检查它是null
:
if (property_exists($this, '_' . $name) && $this->{'_' . $name} !== null)