2

PHP でオブザーバー デザイン パターンを実装する必要があります。標準のSplObserverインターフェースの問題は、そのupdate(SplSubject $subject)メソッドが、私にとって必要な追加の引数の提供をサポートしていないことです。

このような独自のインターフェイスを作成する必要がありますか?

interface PushObserver {
  public function update($sender, array $pushData);
}

または、クラスのユーザーが独自のインターフェイスを実装する必要がない、より標準的な方法はありますか? これを扱っているのは私だけではありませんが、この問題に関する記事は 1 つも見つかりませんでした。

4

3 に答える 3

2

オブザーバーで要求することが本当に重要かどうかはわかりませんが、それ$pushDataがオプションである場合は、まだ実装または拡張できますSplObserverが、$pushDataオプションにすると、それが可能になります:

class PushObserver implements SplObserver {
    public function update (SplSubject $SplSubject, Array $pushData = null) {}
}

または:

interface PushObserver extends SplObserver {
    public function update (SplSubject $SplSubject, Array $pushData = null);
}
于 2012-09-03T13:16:48.113 に答える
1

送信者はpushDataについて知っていますよね?送信者を編集するだけで十分な場合、なぜわざわざ新しいインターフェイスを作成するのですか?

getPushData()メソッドを$ senderに追加するだけで、その変数を取得できます。

于 2012-09-03T13:10:50.727 に答える
1

で、以下を反映するようにメソッドをSplObserver変更します。update

public function update(SplSubject $subject, array $params = array())

call_user_func_arrayその後、残りを行うために使用します。

于 2012-10-13T01:03:51.417 に答える