Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 开发网站时何时使用观察者模式?_Php_Design Patterns_Observer Pattern - Fatal编程技术网

Php 开发网站时何时使用观察者模式?

Php 开发网站时何时使用观察者模式?,php,design-patterns,observer-pattern,Php,Design Patterns,Observer Pattern,我需要一些在开发网站时可以使用observer模式的实例。。(使用php) 我有一个“当用户发布文章(主题)时,类RSS和类电子邮件(观察者)将修改RSS并向管理员发送电子邮件”,但我甚至不确定这是否是一个好的示例 您在哪里使用观察者模式 顺便说一句:这不是家庭作业,我只是躺在这里思考这个模式:) 已编辑 我更好奇的是“何时做”而不是“如何做”我有一个对象(单元格)集合(数组)作为“cellCollection”对象的属性。为了减少内存使用,每个单元实际上都以序列化形式保存在缓存中(磁盘文件、A

我需要一些在开发网站时可以使用observer模式的实例。。(使用php)

我有一个“当用户发布文章(主题)时,类RSS和类电子邮件(观察者)将修改RSS并向管理员发送电子邮件”,但我甚至不确定这是否是一个好的示例

您在哪里使用观察者模式

顺便说一句:这不是家庭作业,我只是躺在这里思考这个模式:)

已编辑
我更好奇的是“何时做”而不是“如何做”

我有一个对象(单元格)集合(数组)作为“cellCollection”对象的属性。为了减少内存使用,每个单元实际上都以序列化形式保存在缓存中(磁盘文件、APC、memcache等等),而“cellCollection”对象保存指向缓存位置的指针数组。我使用观察者模式,以便在修改“cell”对象时通知“cellCollection”对象,以便它可以在缓存中更新该“cell”对象的主副本,并根据需要调整其指针。

在几乎无状态的PHP中,通常不需要观察者模式

但是,请考虑以下几点。我跳过了一些代码,但您应该能够填补空白

class Stats extends Observer implements SplObserver
{
    private function updateStats($action) { }
    public function update(SplSubject $subject)
    {
        if ($subject instanceOf Article)
        {
            if ($subject->notice == Article::NOTICE_POSTED_ARTICLE)
            {
                $this->updateStats($subject->notice);
            }
        }
    }
}

class Article extends Subject implements SplSubject
{
    const NOTICE_POSTED_ARTICLE = "Article Posted";

    private $observers;
    public $notice;

    public function postArticle($text)
    {
        $this->notice = self::NOTICE_POSTED_ARTICLE;
        $this->notify();
    }

    public function notify()
    {
        foreach ($this->observers as $observer)
        {
            $observer->update($this);
        }
    }
}

每次“动作”发生时,我都使用它。这些东西包括每种实体(用户、内容、标记等)上的基本CRUD,但也包括许多其他操作(用户登录、用户注销、模块加载、模块退出等)

我还更喜欢在加载某些内容之后、保存某些内容(插入或更新到数据库)之前或呈现某些内容(例如表单)之前使用
Visitor
模式来改变数据的结构


在一次页面加载中,操作可能会发生多次。

我可能听起来像个傻瓜,但。。。你能用php实现吗??缓存中需要什么类型的数据?你有我可以学习的链接吗?是的,你可以用PHP来做,否则我就做不到了!讨论中的应用程序是PHPExcel,其中Excel工作表可以有数千个单元格,每个单元格都是工作表的cellCollection对象引用的对象。几篇关于使用观察者模式的文章:或者,由于您的类文章扩展了“Subject”,如果notify()、$observators和$notice在父类中的何处不是更好吗?无论如何,它可以作为一个例子,thxs