[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