我需要在PHP中实现一个观察者设计模式。标准 SplObserver 接口的问题在于其更新(SplSubject $ subject)方法不支持提供对我来说必要的其他参数。
我是否必须创建自己的界面?
interface PushObserver {
public function update($sender, array $pushData);
}
或者是否有更标准的方法不需要我班级的用户实现我自己的界面?我知道我不是唯一一个处理此问题的人,但我没有找到关于这个问题的一篇文章。
答案 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
完成剩下的工作。