您好,登录后才能下订单哦!
这篇文章给大家介绍如何在PHP项目中应用观察者模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
一、首先得有两个接口类,用以框定观察者模式,
一个被观察者接口类(一般申明有三个必须方法:1.添加观察者对象的方法,2.删除观察者对象的方法 ,3.通知观察者进行 相应执行的方法),
一个观察者接口类(一般只有一个必须方法,就是执行)
如果直接甩代码可能有点难理解,那么就先给个示意图来明确一下吧!
二、根据观察者接口类的框定我们定下接口类如下代码:
(示例是网上抄的,因为易于理解,申明一下出处,网址:https://www.jb51.net/article/170753.htm):
<?php // 被观察者接口 interface Subject{ public function register(Observer $observer); //添加(注册)观察者对象 public function detach(Observer $observer); //删除观察者对象 public function notify(); //通知观察者执行相应功能 } // 观察者接口 interface Observer{ public function watch(); //观察者要执行的方法 }
三、根据框定的结构,大概的理解一下就是,要实现 被观察者对象 存储各种观察者对象(完成各种功能的对象)存储起来,然后通只各观察者执行自己的功能,先看看如下的实现代码
<?php // 被观察者继承类 class Action implements Subject{ public $_observers=array(); //用于存储观察者对象 //用于添加(注册)观察者对象 public function register(Observer $observer){ $this->_observers[]=$observer; } //用于删除观察者对象 public function detach(Observer $observer){ $index = array_search($observer, $this->_observers); if ($index === FALSE || ! array_key_exists($index, $this->_observers)) { return FALSE; } unset($this->_observers[$index]); return TRUE; } //通知各观察者 public function notify(){ //****重点,其实就是循环中执行各观察这对象的watch方法,不同功能方法内容不同但方法名相同 foreach ($this->_observers as $observer) { $observer->watch(); } } } // cat观察者继承类 class Cat implements Observer{ public function watch(){ echo "Cat watches TV<hr/>"; } } //dog观察者继承类 class Dog implements Observer{ public function watch(){ echo "Dog watches TV<hr/>"; } } //people观察者继承类 class People implements Observer{ public function watch(){ echo "People watches TV<hr/>"; } }
好了,我们现在通过上面的继承就能明白了,观察者就是定义各种功能的对象(这些对象就是:比如给第一次登录的用户发红包,给用户最新的10条文章推送,给非vip用户推送10条需要注册才能打开的视频诱导用户开通vip。。。。),被观察者对象要实现的就是 将添加(注册)的观察者对象存储起来并逐个通知执行观察者各自的功能,
四、那么就进行实例化对象进行操作了!代码如下:
// 应用实例 $action=new Action(); $action->register(new Cat()); $action->register(new People()); $action->register(new Dog()); $action->notify();
关于如何在PHP项目中应用观察者模式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。