Advertisement
fruffl

Signal Slot Pattern

Nov 28th, 2012
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.53 KB | None | 0 0
  1.     class foo EXTENDS \ILLI\Base\aBase
  2.     {
  3.         public function setAdapter($trigger, $target, $instance)
  4.         {
  5.             $config             = new \ILLI\Base\Component\Delegate\sConfigConstructMethod;
  6.             $config->Context        = $instance;
  7.             $config->functionName       = $target;
  8.            
  9.             $adapter            = new \ILLI\Base\Component\Delegate\Hook\sConcreteAdapter;
  10.             $adapter->triggerMethodName = get_called_class().'::'.$trigger;
  11.             $adapter->Delegate      = new \ILLI\Base\Component\Delegate\Method($config);
  12.            
  13.             $this->tAdapterHook_register($adapter);
  14.            
  15.             return $this;
  16.         }
  17.        
  18.         public function setSignal($trigger, $event, $slot, $target, $instance)
  19.         {
  20.             $config             = new \ILLI\Base\Component\Delegate\sConfigConstructMethod;
  21.             $config->Context        = $instance;
  22.             $config->functionName       = $target;
  23.             $config->strictArguments    = false;
  24.            
  25.             $signal             = new \ILLI\Base\Component\Delegate\Hook\sConcreteSignal;
  26.             $signal->triggerMethodName  = get_called_class().'::'.$trigger;
  27.             $signal->eventName      = $event;
  28.             $signal->slotIdent      = $slot;
  29.             $signal->Delegate       = new \ILLI\Base\Component\Delegate\Method($config);
  30.            
  31.             $this->tSignalHook_register($signal);
  32.            
  33.             return $this;
  34.         }
  35.        
  36.         public $a;
  37.         public $s;
  38.         public function enableAdapter() { var_dump(__METHOD__); $this->a = TRUE; return $this; }
  39.         public function enableSignal()  { var_dump(__METHOD__); $this->s = TRUE; return $this; }
  40.        
  41.         public function baz($__hello)
  42.         {
  43.             var_dump(__METHOD__.' START');
  44.             if(TRUE === $this->a)
  45.                 return $this->tAdapterHook_emit(__METHOD__, ['__world' => $__hello]); // strict args: true
  46.                
  47.             if(TRUE === $this->s)
  48.                 $this->tSignalHook_emit(__Method__, 'pre', [$__hello]); // strict args: false
  49.                
  50.             var_dump($__hello);
  51.            
  52.             if(TRUE === $this->s)
  53.                 $this->tSignalHook_emit(__Method__, 'post', [$__hello]);
  54.            
  55.             var_dump(__METHOD__.' END');
  56.             return $this;
  57.         }
  58.     }
  59.    
  60.     class adapterTarget
  61.     {
  62.         public function target($__world) { var_dump(__METHOD__); var_dump($__world.' World!'); }
  63.     }
  64.    
  65.     class signalTarget_1
  66.     {
  67.         public function method_1($bla) { var_dump(__METHOD__.':'.$bla); }
  68.         public function method_2($baz) { var_dump(__METHOD__.':'.$baz); }
  69.     }
  70.    
  71.     class signalTarget_2
  72.     {
  73.         public function method_1($bla) { var_dump(__METHOD__.':'.$bla); }
  74.         public function method_2($baz) { var_dump(__METHOD__.':'.$baz); }
  75.     }
  76.    
  77.    
  78.     $foo = new foo;
  79.    
  80.     $SignalTarget_1 = new SignalTarget_1;
  81.     $SignalTarget_2 = new SignalTarget_2;
  82.    
  83.     $foo
  84.     ->setAdapter('baz', 'target', new adapterTarget)
  85.     ->setSignal('baz', 'pre', 1, 'method_1', $SignalTarget_1)
  86.     ->setSignal('baz', 'pre', 2, 'method_1', $SignalTarget_2)
  87.     ->setSignal('baz', 'post', 1, 'method_2', $SignalTarget_1)
  88.     ->setSignal('baz', 'post', 2, 'method_2', $SignalTarget_2)
  89.     ->baz('Hello')
  90.     ->enableSignal()
  91.     ->baz('Hello')
  92.     ->enableAdapter()
  93.     ->baz('Hi')
  94.     ;
  95.  
  96. string(35) "localhost\illiFW\dev\foo::baz START"
  97. string(5) "Hello"
  98. string(33) "localhost\illiFW\dev\foo::baz END"
  99. string(38) "localhost\illiFW\dev\foo::enableSignal"
  100. string(35) "localhost\illiFW\dev\foo::baz START"
  101. string(51) "localhost\illiFW\dev\signalTarget_1::method_1:Hello"
  102. string(51) "localhost\illiFW\dev\signalTarget_2::method_1:Hello"
  103. string(5) "Hello"
  104. string(51) "localhost\illiFW\dev\signalTarget_1::method_2:Hello"
  105. string(51) "localhost\illiFW\dev\signalTarget_2::method_2:Hello"
  106. string(33) "localhost\illiFW\dev\foo::baz END"
  107. string(39) "localhost\illiFW\dev\foo::enableAdapter"
  108. string(35) "localhost\illiFW\dev\foo::baz START"
  109. string(42) "localhost\illiFW\dev\adapterTarget::target"
  110. string(9) "Hi World!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement