downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

SplSubject::attach> <SplObserver::update
[edit] Last updated: Fri, 25 May 2012

view this page in

SplSubject インターフェイス

(PHP 5 >= 5.1.0)

導入

SplSubject インターフェイスを SplObserver とともに使うと、Observer パターンを実装することができます。

インターフェイス概要

SplSubject {
/* メソッド */
abstract public void attach ( SplObserver $observer )
abstract public void detach ( SplObserver $observer )
abstract public void notify ( void )
}

目次



add a note add a note User Contributed Notes SplSubject
przemyslaw dot szpiler at gmail dot com 27-Feb-2012 06: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
*/

?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites