通过__get()实例化时未找到自动加载的类

时间:2012-04-19 21:43:45

标签: php

这是我自动加载和调用/实例化我的类的代码

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

1 个答案:

答案 0 :(得分:0)

您的代码应该是$this->_helper->test();$this->{'_' . $name} = new $classname();

你的魔法在每次调用时都会重新实例化。您应该首先检查它是null

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