//观察者模式 /** * * 大概意思就是,当一个事件的状态发生改变之后,通知其他依赖的事务。 * * 一般的做法是代码下面直接撸代码, 这样的不好的地方就是,没增加一个依赖都需要对下面增加,接着更改。 * 逻辑多了,就会很长很长。当然大部分会每个依赖业务封装到一个方法中。如果模块太大可能就拆分做队列了。 * 其他依赖直接消费队列就可以了。 * 现在有一种模式可以解决这种方法。 * 大概就是下面代码的样子。 * Class upload */ class upload{ public $_obervers = []; /** * 增加订阅对象 * @param $object */ public function register($object){ $this->_obervers[] = $object; } /** * 触发器 */ public function trigger(){ if(empty($this->_obervers)){ return; } foreach($this->_obervers as $obj){ $obj->execute(); } } /** * 具体操作事务 */ public function htm5toxml(){ echo 'upload is end'; echo " "; $this->trigger(); } } class a{ public function execute(){ echo 'this is a execute'; echo " "; } } class b{ public function execute(){ echo 'this is b execute'; echo " "; } } $upload = new upload(); $upload->register(new a()); $upload->register(new b()); $upload->htm5toxml();