php中的观察者模式简单实例

 更新时间:2015年01月20日 09:05:58   投稿:junjie  
这篇文章主要介绍了php中的观察者模式简单实例,观察者模式是设计模式中比较常见的一个模式,包含两个或者更多的互相交互的类,本文直接给出实现代码,需要的朋友可以参考下

观察者模式是设计模式中比较常见的一个模式,包含两个或者更多的互相交互的类。这一模式允许某个类观察另外一个类的状态,当被观察类的状态发生变化时候,观察者会进行得到通知进而更新相应状态。

php的SPL标准类库提供了SplSubject和SplObserver接口来实现,被观察的类叫subject,负责观察的类叫observer。这一模式是SplSubject类维护了一个特定状态,

当这个状态发生变化时候,它就会调用notify方法。调用notify方法时,所有之前使用attach方法注册的SplObserver实例的update方法都会调用,Demo如下:

复制代码 代码如下:

class DemoSubject implements SplSubject{
    private $observers, $value;
 
    public function __construct(){
        $this->observers = array();
    }
 
    public function attach(SplObserver $observer){
        $this->observers[] = $observer;
    }
 
    public function detach(SplObserver $observer){
        if($idx = array_search($observer, $this->observers, true)){
            unset($this->observers[$idx]);
        }
    }
 
    public function notify(){
        foreach($this->observers as $observer){
            $observer->update($this);
        }
    }
 
    public function setValue($value){
        $this->value = $value;
        $this->notify();
    }
 
    public function getValue(){
        return $this->value;
    }
}
 
class DemoObserver implements SplObserver{
    public function update(SplSubject $subject){
        echo 'The new value is '. $subject->getValue();
    }
}
 
$subject = new DemoSubject();
$observer = new DemoObserver();
$subject->attach($observer);
$subject->setValue(5);

相关文章

  • php实现URL加密解密的方法

    php实现URL加密解密的方法

    这篇文章主要介绍了php实现URL加密解密的方法,结合实例形式分析了php针对URL字符串进行加密解密操作的相关技巧,需要的朋友可以参考下
    2016-11-11
  • PHP+AJAX实现无刷新注册(带用户名实时检测)

    PHP+AJAX实现无刷新注册(带用户名实时检测)

    PHP+AJAX实现无刷新注册(带用户名实时检测)...
    2007-01-01
  • php读取二进制流(C语言结构体struct数据文件)的深入解析

    php读取二进制流(C语言结构体struct数据文件)的深入解析

    本篇文章是对php读取二进制流(C语言结构体struct数据文件)进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP laravel实现导出PDF功能

    PHP laravel实现导出PDF功能

    有时候我们会需要使用PHP导出pdf。这篇文章主要是记录一下laravel实现导出PDF的两种方式。文中的示例代码讲解详细,需要的可以参考一下
    2022-10-10
  • PHP中使用imagick实现把PDF转成图片

    PHP中使用imagick实现把PDF转成图片

    这篇文章主要介绍了PHP中使用imagick实现把PDF转成图片,本文着重讲解了2个错误的处理,特别是GhostScript错误,需要的朋友可以参考下
    2015-01-01
  • 示例详解Laravel重置密码代码重构

    示例详解Laravel重置密码代码重构

    假如需要使用laravel搭建一个后台内容管理系统,但laravel默认的登陆注册不能满足目前的需求,重置密码的话因为是用在后台,并且不需要发送邮件进行重置,所以默认的重置密码肯定是不行的。下面我们一起来看看如何进行Laravel重置密码重构。
    2016-08-08
  • php fread读取文件注意事项

    php fread读取文件注意事项

    php fread函数用于从文件中读取一定长度的字符,本文章向大家介绍fread读取文件的实例以及使用该函数读取文件需要注意的几个地方,需要的朋友可以参考一下。
    2016-09-09
  • 比较discuz和ecshop的截取字符串函数php版

    比较discuz和ecshop的截取字符串函数php版

    网上看到一篇文章 discuz和ecshop截取字符串的两个函数,比较了一下两个版本的函数,都各有局限,只能在特定的前提下使用,但是学习一下有利于拓宽思路,了解PHP的扩展功能
    2012-09-09
  • PHP 创建标签云函数代码

    PHP 创建标签云函数代码

    PHP创建标签云函数代码,使用此函数创建标签云。
    2010-05-05
  • PHP用PDO如何封装简单易用的DB类详解

    PHP用PDO如何封装简单易用的DB类详解

    PDO(php Data Object)是PHP的数据对象,它为PHP访问数据库提供了一种兼容一致的轻量级接口,也就是提供了一个数据库访问抽象层,这篇文章主要给大家介绍了关于PHP用PDO如何封装简单易用的DB类的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07

最新评论