File:
[ELWIX - Embedded LightWeight unIX -] /
embedaddon /
php /
ext /
spl /
tests /
observer_001.phpt
Revision
1.1.1.1 (vendor branch):
download - view:
text,
annotated -
select for diffs -
revision graph
Tue Feb 21 23:48:01 2012 UTC (12 years, 6 months ago) by
misho
Branches:
php,
MAIN
CVS tags:
v5_4_3elwix,
v5_4_29p0,
v5_4_29,
v5_4_20p0,
v5_4_20,
v5_4_17p0,
v5_4_17,
v5_3_10,
HEAD
php
--TEST--
SPL: SplObserver and SplSubject (empty notify)
--FILE--
<?php
class ObserverImpl implements SplObserver
{
protected $name = '';
function __construct($name = 'obj')
{
$this->name = '$' . $name;
}
function update(SplSubject $subject)
{
echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
}
function getName()
{
return $this->name;
}
}
class SubjectImpl implements SplSubject
{
protected $name = '';
protected $observers = array();
function __construct($name = 'sub')
{
$this->name = '$' . $name;
}
function attach(SplObserver $observer)
{
echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
if (!in_array($observer, $this->observers))
{
$this->observers[] = $observer;
}
}
function detach(SplObserver $observer)
{
echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
$idx = array_search($observer, $this->observers);
if ($idx !== false)
{
unset($this->observers[$idx]);
}
}
function notify()
{
echo '$sub->' . __METHOD__ . "();\n";
foreach($this->observers as $observer)
{
$observer->update($this);
}
}
function getName()
{
return $this->name;
}
}
$sub = new SubjectImpl;
$ob1 = new ObserverImpl("ob1");
$ob2 = new ObserverImpl("ob2");
$ob3 = new ObserverImpl("ob3");
$sub->attach($ob1);
$sub->attach($ob1);
$sub->attach($ob2);
$sub->attach($ob3);
$sub->notify();
$sub->detach($ob3);
$sub->notify();
$sub->detach($ob2);
$sub->detach($ob1);
$sub->notify();
$sub->attach($ob3);
$sub->notify();
?>
===DONE===
--EXPECT--
$sub->SubjectImpl::attach($ob1);
$sub->SubjectImpl::attach($ob1);
$sub->SubjectImpl::attach($ob2);
$sub->SubjectImpl::attach($ob3);
$sub->SubjectImpl::notify();
$ob1->ObserverImpl::update($sub);
$ob2->ObserverImpl::update($sub);
$ob3->ObserverImpl::update($sub);
$sub->SubjectImpl::detach($ob3);
$sub->SubjectImpl::notify();
$ob1->ObserverImpl::update($sub);
$ob2->ObserverImpl::update($sub);
$sub->SubjectImpl::detach($ob2);
$sub->SubjectImpl::detach($ob1);
$sub->SubjectImpl::notify();
$sub->SubjectImpl::attach($ob3);
$sub->SubjectImpl::notify();
$ob3->ObserverImpl::update($sub);
===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>