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 に答える