| 
<?php
 require_once 'AVlib/Event/Dispatcher.php';
 
 class example_event extends AVlib_Event
 {
 
 const EXAMPLE = 'example_example';
 
 public $example_var;
 
 public function __construct ( $type, $bubbles = false, $cancelable = false, $example_var ) {
 
 //construct the parent
 parent::__construct ( $type, $bubbles, $cancelable );
 
 //store Your own custom variables
 $this->example_var = $example_var;
 
 }
 
 public function cloneEvent ( $eventPhase, $target, $currentTarget ) {
 $evt = parent::cloneEvent ( $eventPhase, $target, $currentTarget );
 
 /*
 * do something
 * $this->example_var was copied to clone by parent::cloneEvent
 *
 * so you should extend this function only if you got some other cloning to do
 */
 
 return $evt;
 }
 
 public function toString() {
 return parent::toString(array('example_var' => $this->example_var));
 }
 }
 
 class disp1 extends AVlib_Event_Dispatcher
 {
 
 function __construct ( ) {
 
 //we set up a event listener for event 'loaded' and handle them in listener function
 $this->addEventListener ( example_event::EXAMPLE, array (
 $this,
 'listener'
 ) );
 
 //now we make 10 disp2 objects
 for ( $i = 0; $i < 10; $i++ ) {
 new disp2 ( );
 }
 }
 
 public function listener ( AVlib_Event $event ) {
 
 echo $event;
 
 /*
 * if that event is stoppable, i could stop it on this branch or stop
 * it immediately, so it will not bubble further up to (main)
 */
 
 }
 }
 
 class disp2 extends AVlib_Event_Dispatcher
 {
 
 public function __construct ( ) {
 $evt = new example_event ( example_event::EXAMPLE, true, false, 'will be catched every time' );
 $this->dispatchEvent ( $evt );
 }
 }
 
 $d = new disp1 ( );
 
 
 
 
 
 |