[geeklog-devel] GL2 event model
Tony Bibbs
tony at tonybibbs.com
Wed Jul 21 17:31:57 EDT 2004
The plugin API for GL2 that Vinny has drafted if surprisingly small
because we are introducing an event based model. Essentially, the GL2
and all plugins have the option to register events that others can
listen to. To implement this I recommend an observer/observable design
pattern similar to the example below. A few things that need
discussion. First, the example below allows listening only at the
object level. The alternative is the force listening at the event level
(in otherwords, addListener would take as a second arg an array of
events the object listens to). Any preference? General questions?:
class MySubjectObserverClass {
private $listeners = array();
private $listernerNextID = 0;
// Alternative names: register, subscribe...
public function addListerner(&$obj)
{
$this->_listerners[] =& $obj;
return $this->listernerNextID++;
}
// Alternative name: unregister, unsubscribe...
public function removeListerner($id,'even't)
{
unset($this->listerners[$id]);
}
// Alternative name: broadcast...
public function notifyAll($event)
{
foreach ($this->listerners as $id => $obj)
{
$this->listerners[$id]->notify($event, $this);
}
}
// Alternative name: listen...
function notify($event, &$obj)
{
switch (get_class($obj)) {
case 'blah':
...
}
}
}
More information about the geeklog-devel
mailing list