2

我需要在 PHP 中实现一个观察者设计模式。标准SplObserver接口的问题在于它的update(SplSubject $subject)方法不支持提供我需要的其他参数。

我必须像这样创建自己的界面吗?

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

还是有一种更标准的方式不需要我的类的用户实现我自己的接口?我知道我不是唯一一个处理这个问题的人,但我还没有找到一篇关于这个问题的文章。

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 回答