0

ファクトリメソッド用に作成したこのクラスがあり、22行目で次のようなエラーが発生し続けます。

致命的なエラー:オブジェクトコンテキストにないときに$thisを使用する

私は他の人々の投稿や同様の質問を見たことがありますが、残念ながら、彼らが私の状況への答えとして取ったものを適用できるほど十分に何が起こっているのか理解できません。

私のクラスはそのように呼ばれています:

$class = AisisCore_Factory_Pattern('class_you_want');

そして、そこから以下が実行されます。

class AisisCore_Factory_Pattern {

    protected static $_class_instance;

    protected static $_dependencies;

    public function get_instance(){
        if(self::$_class_instance == null){
            $_class_instance = new self();
        }

        return self::$_class_instance;
    }

    public function create($class){
        if(empty($class)){
            throw new AisisCore_Exceptions_Exception('Class cannot be empty.');
        }

        if(null === self::$_dependencies){
            $this->_create_dependecies();
        }

        if(!isset(self::$_dependencies['dependencies'][$class])){
            throw new AisisCore_Exceptions_Exception('This class does not exist in the function.php dependecies array!');
        }

        if(isset(self::$_dependencies['dependencies'][$class]['arguments'])){
            $new_class =  new $class(implode(', ', self::$_dependencies['dependencies'][$class]['params']));
            return $new_class;
        }else{
            $new_class = new $class();
            return $new_class;
        }


    }

    private function _create_dependecies(){
        self::$_dependencies = get_template_directory() . '/functions.php';
    }

}

それがおかしくなりそうなところは次のとおりです。

$this->_create_dependecies();

それがどのように文脈から外れているのか、または私がそれを適切に呼び出す方法がわかりません。

4

3 に答える 3

0

エラーは、使用$thisできないときに使用していることを示しているため、次の部分があります。

$this->_create_dependecies();

次のように変更します:

self::_create_dependecies();
于 2012-12-14T23:38:56.963 に答える
0

したがって、これをシングルトンとして実行しようとしている場合は、get_instance()メソッドを静的に定義する必要があります。さらに、どのようにcreate()を呼び出していますか?私はそれへの言及をまったく見ていません。おそらく、create()はパブリック静的関数であり、$ this-> _ create_dependecies();を変更する必要があります。self :: _ create_dependencies()に追加し、静的キーワードをcreate_dependenciesメソッドの定義に追加して、public staticfunctioncreate_dependenciesにします。次に、すべてをまとめて...

$class = AisisCore_Factory_Pattern::create('class_you_want');

class AisisCore_Factory_Pattern {

  protected static $_class_instance;

  protected static $_dependencies;

  public static function get_instance(){
    if(self::$_class_instance == null){
        $_class_instance = new self();
    }

    return self::$_class_instance;
  }

  public static function create($class){
    if(empty($class)){
        throw new AisisCore_Exceptions_Exception('Class cannot be empty.');
    }

    if(null === self::$_dependencies){
        self::_create_dependecies();
    }

    if(!isset(self::$_dependencies['dependencies'][$class])){
        throw new AisisCore_Exceptions_Exception('This class does not exist in the function.php dependecies array!');
    }

    if(isset(self::$_dependencies['dependencies'][$class]['arguments'])){
        $new_class =  new $class(implode(', ', self::$_dependencies['dependencies'][$class]['params']));
        return $new_class;
    }else{
        $new_class = new $class();
        return $new_class;
    }


}

private static function _create_dependecies(){
    self::$_dependencies = get_template_directory() . '/functions.php';
}

}

そしてそれはあなたをする必要があります。あなたが本当に非静的にそれにアクセスしたいのなら(そうです、それは本当の言葉ではないことを知っていますが、私はそれが好きです)、あなたはこのようなことを言うべきです...

$class = AisisCore_Factory_Pattern::get_instance()->create('class_you_want');
//or...
$class = AisisCore_Factory_Pattern::get_instance();
$newclass = $class->create('class_you_want');

もちろん、2番目の例では、create関数定義からstaticキーワードを削除します。

于 2012-12-15T00:22:24.047 に答える
-1

私はあなたが書くべきだと信じています$class = new AisisCore_Factory_Pattern("class_you_Want");

于 2012-12-14T23:38:30.123 に答える