| 
<?php 
namespace frdl\Flow;
 
 log('Starting testCase: '.__FILE__);
 function lnbr(){
 echo "\n";
 }
 function log($str){
 echo microtime().':'.$str;
 lnbr();
 ob_end_flush();
 }
 function highlight_num($file)
 {
 $lines = implode(range(1, count(file($file))), '<br />');
 $content = highlight_file($file, true);
 
 
 $out = '
 <style type="text/css">
 .num {
 float: left;
 color: gray;
 font-size: 13px;
 font-family: monospace;
 text-align: right;
 margin-right: 6pt;
 padding-right: 6pt;
 border-right: 1px solid gray;}
 
 body {margin: 0px; margin-left: 5px;}
 td {vertical-align: top;}
 code {white-space: nowrap;}
 </style>';
 
 
 
 $out.= "<table><tr><td class=\"num\">\n$lines\n</td><td>\n$content\n</td></tr></table>";
 
 return $out;
 }
 
 log('Creating inherited Element class and Testclasses'.lnbr().'Bind Events on Testclasses and tes-listeners'.lnbr().'Bind a TestDebugger to the "test" Event and trigger it');
 class TestElement extends Element{
 protected $reflection;
 protected $initTime=null;
 public function __construct(){
 parent::create( func_get_args());
 $this->refelection = \ReflectionClass::export(get_class($this), true);
 }
 function __destruct(){
 register_shutdown_function(function ($className) {
 log('shutdown_function.invocation by destructor of '.$className);
 }, get_class($this));
 }
 
 public function test($event, &$target, &$eventData){
 log('Triggering listener of "'.$event.'" Event in listener '.__METHOD__);
 log(
 '<pre>'
 .'Eventdata: '.lnbr()
 .print_r($eventData,true)
 .lnbr()
 .__CLASS__.':'
 .lnbr()
 .$this->refelection.lnbr()
 .'</pre>'.lnbr()
 .highlight_num(__FILE__).lnbr()
 );
 }
 }
 class MyElementSubClass extends Element{
 protected function __construct(){
 $args = func_get_args();
 parent::__construct($args);
 $this->name=$args[0];
 $this->data=$args[1];
 log('Creating Instance of '.__CLASS__.' inherrited from '.get_class(parent) );
 }
 public static function create($name, $data){
 return parent::create($name, $data);
 }
 }
 
 function myEventListenerGlobalFunction($event, &$target, &$data) {
 // return false;  // cancel/ stopPropagation
 log("Hello from triggered function myEventListenerGlobalFunction() on the $event Event");
 }
 
 class Foo {
 public function hello($event, &$target, &$eventData) {
 log("Hello from triggered ".__CLASS__."($event, ".print_r($target,true).", ".print_r($eventData,true).")");
 }
 }
 
 class Bar {
 public static function listen($event, &$target, &$eventData) {
 log("Hello from Bar::hello() dispatch ".$event);
 }
 }
 $foo = new Foo();
 $Context = new \stdclass;
 
 $myElement = MyElementSubClass::create($Context)
 // bind a global function to the 'test' event
 ->on("test", "myEventListenerGlobalFunction")
 
 // bind an anonymous function
 ->on("test", function($event, &$target, &$eventData) {
 log("Hello from anonymous function triggered by Event:".$event.' with Data:'.print_r($eventData,true));
 })
 
 
 ->on("test", "hello", $foo)  // bind an class function on an instance
 
 
 ->on("test", "Bar::listen")  // bind a static class function
 
 
 
 ;
 $testData=array(
 'data' => array('someTestData', 1, 2, 3, 5, 8, 13, 21, new \stdclass),
 'Author' => '(c) Till Wehowski, http://frdl.webfan.de',
 '__FILE__' => __FILE__,
 );
 $myElement()
 ->on("test", "test", new TestElement)
 
 // dispatch the "test event"
 ->trigger("test", $testData)
 
 ;
 |