0

私は本当にこの問題に夢中になっています。子クラスの静的メソッドで親クラスからメソッドを呼び出すことができません..

これは私が試したものですが、うまくいきません..

class custom extends service {

    private $service;

    function __construct() {
        parent::__construct();
        $this->service = new service;
    }

   public static function activematches($callback) {

        $select_by_user = parent::$db->select('matches', '*', array('user_id' => $user_id, 

        if (count($select_by_user) == 0 && count($select_by_opponent) == 0)
            parent::$check->send('11');
        else
            $this->service->make($callback['request'], $callback['data']);
    }

電話すると、次のよう$this->serviceになります。

Fatal error: Using $this when not in object context

それを静的にしてみました、親メソッドparent::methodを呼び出して同じメソッドを子クラスに入れてみましたが、何も...

私はOOPを初めて使用しますが、助けはありますか?

4

3 に答える 3

3

静的呼び出し内でアクセスするには、プロパティも静的に定義する必要があります

 protected static $services;

そこから、静的メソッド内でいずれかとして参照する必要があります。

 self::$services 

また

 static::$services 

このコンテキストでの参照selfは、参照が定義されている $services プロパティを参照します。static参照が呼び出されたクラス コンテキストからプロパティを参照します。詳細については、レイト スタティック バインディングに関するマニュアルの説明を参照してください。

アップデート

customこの場合に広がるという事実に基づいて、serviceこれがあなたが本当に求めているものであるとは思えません。次のようなクラス定義:

class custom extends service {
    public function activematches($callback, $user_id) {

        $select_by_user = $this->db->select('matches', '*', array('user_id' => $user_id)); 
        if (count($select_by_user) == 0 && count($select_by_opponent) == 0)
            $this->check->send('11');
        else
            $this->make($callback['request'], $callback['data']);
    }
}

ご希望に近いかもしれません。

于 2013-07-24T14:50:21.777 に答える
0

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

これは実際にあなたの質問に対する答えです。クラスの静的メンバーの特徴は、オブジェクトを作成せずに使用できることです。$this - コンテキスト メソッドが呼び出されたオブジェクトの参照。

したがって、この方法で問題を調べてみてください-静的メンバーには $this がありません。この方法では、親クラスの静的メンバーのみを使用できます-self::method。

または、実際に親クラスでオブジェクトを作成し、「動的」表記で「動的」メソッドを使用することもできますが、これは後でさらに夢中になります、信じてください)

于 2013-07-26T09:51:34.243 に答える
0

親メソッドmakeが静的でない場合:親クラスの非静的メソッドを子クラスの静的メソッドから呼び出すことはできません。子メソッドを非静的にすることを検討しましたか? ここがあなたの最良の選択肢だと思います。

親メソッドmakeが静的な場合:

parent::make($callback['request'], $callback['data']);

しかし、これはPHP 5.3.0 で導入されたLate Static Bindingと呼ばれます。古いバージョンでは動作しませんので、注意してください。

于 2013-07-24T15:05:48.647 に答える