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班级中

4

1 回答 1

0

它应该是$this->_helper->test();你的代码正在做的:$this->{'_' . $name} = new $classname();

您的神奇方法是在每次调用时重新实例化该类。你应该让它检查它是否是null第一个:

if (property_exists($this, '_' . $name) && $this->{'_' . $name} !== null)
于 2012-04-19T21:48:31.697 回答