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

search for in the

SplSubject::attach> <SplObserver::update
[edit] Last updated: Fri, 26 Apr 2013

view this page in

The SplSubject interface

(PHP 5 >= 5.1.0)

Introduction

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

Interface synopsis

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

Table of Contents



add a note add a note User Contributed Notes SplSubject - [1 notes]
up
2
przemyslaw dot szpiler at gmail dot com
1 year ago
<?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