如果我们已经使用过传输,如何实施观察?

时间:2015-07-08 21:15:05

标签: php observer-pattern

有一个ForumThread类:

class ForumThread extends DbTable
{
    public function insert ($threadId, $comment)
    {
        SQL INSERT INTO parent::tablename VALUES $threadId, $comment
        // email sending how?
        // putting this on a "notice-wall", how?
    }
}

其他一些功能应该在这里完成,例如邮件发送。我不能把它放在这里,否则我违反了SRP。我不能把它放到controller,因为我也想在其他地方插入帖子。我计划实现Observed模式,但我不能从两个类扩展。

1 个答案:

答案 0 :(得分:1)

使用观察者模式,您必须从中发送通知 此方法为了执行相关的观察者代码。

您可以在insert方法中执行类似的操作:

$this->notify('table_insertion', $data);

然后在执行通知行之前的其他地方,必须像这样注册事件:

static::$observers['table_insertion'][] = array('class_to_call' => 'method_in_class_to_call');

通知方法类似于:

public function notify($event, $data) {
  foreach(static::$observer[$event] as $class => $method) {
    new $class->$method($data);
  }
}

希望这是有道理的。