各种类及接口
在线手册:中文 英文
PHP手册

The SplSubject interface

(PHP 5 >= 5.1.0)

简介

The SplSubject interface is used alongside SplObserver to implement the Observer Design Pattern.

接口摘要

SplSubject {
/* 方法 */
abstract public void attach ( SplObserver $observer )
abstract public void detach ( SplObserver $observer )
abstract public void notify ( void )
}

Table of Contents


各种类及接口
在线手册:中文 英文
PHP手册
PHP手册 - N: The SplSubject interface

用户评论:

przemyslaw dot szpiler at gmail dot com (27-Feb-2012 05:54)

<?php

// Example implementation of Observer design pattern:

class MyObserver1 implements SplObserver {
    public function
update(SplSubject $subject) {
        echo
__CLASS__ . ' - ' . $subject->getName();
    }
}

class
MyObserver2 implements SplObserver {
    public function
update(SplSubject $subject) {
        echo
__CLASS__ . ' - ' . $subject->getName();
    }
}

class
MySubject implements SplSubject {
    private
$_observers;
    private
$_name;

    public function
__construct($name) {
       
$this->_observers = new SplObjectStorage();
       
$this->_name = $name;
    }

    public function
attach(SplObserver $observer) {
       
$this->_observers->attach($observer);
    }

    public function
detach(SplObserver $observer) {
       
$this->_observers->detach($observer);
    }

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

    public function
getName() {
        return
$this->_name;
    }
}

$observer1 = new MyObserver1();
$observer2 = new MyObserver2();

$subject = new MySubject("test");

$subject->attach($observer1);
$subject->attach($observer2);
$subject->notify();

/*
will output:

MyObserver1 - test
MyObserver2 - test
*/

$subject->detach($observer2);
$subject->notify();

/*
will output:

MyObserver1 - test
*/

?>