PHP观察者模式原理与简单实现方法示例

 更新时间:2017年08月25日 16:00:44   作者:LoveJulin  
这篇文章主要介绍了PHP观察者模式原理与简单实现方法,结合实例形式分析了php观察者模式的概念、原理、实现方法及相关注意事项,需要的朋友可以参考下

本文实例讲述了PHP观察者模式原理与简单实现方法。分享给大家供大家参考,具体如下:

当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。像wordpress这样的应用程序中,它容外部开发组开发插件,比如用户授权的博客统计插件、积分插件,这时候可以应用观察者模式,先注册这些插件,当用户发布一篇博文后,就回自动通知相应的插件更新。

观察者模式符合接口隔离原则,实现了对象之间的松散耦合。

观察者模式UML图:

在php SPL中已经提供SplSubject和SqlOberver接口

interface SplSubject
{
  function attach(SplObserver $observer);
  function detach(SplObserver $observer);
  function notify();
}
interface SqlObserver
{
  function update(SplSubject $subject);
}

下面具体实现上面例子

class Subject implements SplSubject
{
  private $observers;
  public function attach(SplObserver $observer)
  {
    if (!in_array($observer, $this->observers)) {
      $this->observers[] = $observer;
    }
  }
  public function detach(SplObserver $observer)
  {
    if (false != ($index = array_search($observer, $this->observers))) {
      unset($this->observers[$index]);
    }
  }
  public function post()
  {
    //post相关code
    $this->notify();
  }
  private function notify()
  {
    foreach ($this->observers as $observer) {
      $observer->update($this);
    }
  }
  public function setCount($count)
  {
    echo "数据量加" . $count;
  }
  public function setIntegral($integral)
  {
     echo "积分量加" . $integral;
  }
}
class Observer1 implements SplObserver
{
  public function update($subject)
  {
    $subject-> setCount(1);
  }
}
class Observer2 implements SplObserver
{
  public function update($subject)
  {
    $subject-> setIntegral(10);
  }
}
class Client
{
  public function test()
  {
    $subject = new Subject();
    $subject->attach(new Observer1());
    $subject->attach(new Observer2());
    $subject->post();//输出:数据量加1 积分量加10
  }
}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php生成RSS订阅的方法

    php生成RSS订阅的方法

    这篇文章主要介绍了php生成RSS订阅的方法,较为详细的分析了一个RSS订阅类及其具体使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • 支持中文字母数字、自定义字体php验证码代码

    支持中文字母数字、自定义字体php验证码代码

    支持中文字母数字、自定义字体php验证码代码,需要的朋友可以参考下
    2012-02-02
  • PHP的加密方式及原理

    PHP的加密方式及原理

    有兴趣研究了一下PHP的加密方式及原理,说白了算不上加密,只是用了URL编码和BASE64编码的转换
    2012-06-06
  • php使用swoole实现TCP服务

    php使用swoole实现TCP服务

    这篇文章主要为大家详细介绍了php如何使用swoole实现TCP服务,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-04-04
  • PHP中array_slice函数用法实例详解

    PHP中array_slice函数用法实例详解

    这篇文章主要介绍了PHP中array_slice函数用法,以实例形式详细分析了array_slice函数的具体含义及使用技巧,并以分页方法为例给出了具体的应用实例,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • PHP实现会员账号单唯一登录的方法分析

    PHP实现会员账号单唯一登录的方法分析

    这篇文章主要介绍了PHP实现会员账号单唯一登录的方法,结合实例形式分析了php基于session与文件读写的单一用户登陆限制实现技巧,需要的朋友可以参考下
    2019-03-03
  • php更新mysql后获取影响的行数发生异常解决方法

    php更新mysql后获取影响的行数发生异常解决方法

    mysql_affected_rows函数当UPDATE前后的数据一样时会返回异常值,接下来为大家介绍个简单的解决方法感兴趣的朋友可以参考下哈
    2013-03-03
  • PHP使用SOAP扩展实现WebService的方法

    PHP使用SOAP扩展实现WebService的方法

    这篇文章主要介绍了PHP使用SOAP扩展实现WebService的方法,结合实例形式较为详细的分析了SOAP扩展的原理及实现WebService的相关技巧,需要的朋友可以参考下
    2016-04-04
  • zend api扩展的php对象的autoload工具

    zend api扩展的php对象的autoload工具

    bloader提供一个常用的autoload函数ld,以及两个辅助函数,ld_new(实例化)和ld_unset(销毁对象).
    2011-04-04
  • 解析isset与is_null的区别

    解析isset与is_null的区别

    isset是语句, 和echo, print一样, 是PHP本身的一种语言结构. 而is_null是函数, 和我们一般的函数一样, 可以做为可变函数调用
    2013-08-08

最新评论