PHP观察者模式(推送策略)

时间:2012-09-03 12:58:36

标签: php oop

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

我是否必须创建自己的界面?

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

或者是否有更标准的方法不需要我班级的用户实现我自己的界面?我知道我不是唯一一个处理此问题的人,但我没有找到关于这个问题的一篇文章。

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

发件人知道pushData,对吗?如果编辑发件人就足够了,为什么还要创建一个新界面?

只需向$ sender添加getPushData()方法即可检索该变量。

答案 2 :(得分:1)

SplObserver中,修改您的update方法以反映:

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

然后使用call_user_func_array完成剩下的工作。