Advertisement
fruffl

Signal in PHP

Jan 27th, 2013
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.11 KB | None | 0 0
  1.     class Inventory     Extends \ILLI\Core\Object { public function update(Order $order){ return 'Inventory updated: '.$order->productlist(); } }
  2.     class Service       Extends \ILLI\Core\Object { public function sendmail(Order $order) { return 'receipt has been sent: '.$order->productlist(); } }
  3.     class Dropshipper   Extends \ILLI\Core\Object { public function notify(Order $order) { return 'dropshipper notify: '.$order->productlist(); } }
  4.    
  5.     class Order { public function productlist() { return 'List of ordered products'; } }
  6.    
  7.     class AspectVariable Extends \ILLI\Core\Object
  8.     {
  9.         // register aspectable property
  10.         protected static $__autoConfig = ['order'];
  11.         protected $order = NULL;
  12.        
  13.         public function result()
  14.         {
  15.             $results = $this->__Core_Object_T_Signal_results;
  16.             $order = $this->order;
  17.             $method = __METHOD__;
  18.            
  19.             var_dump(compact('method', 'results', 'order'));
  20.         }
  21.     }
  22.    
  23.    
  24.    
  25.     $manager = new AspectVariable;
  26.     $manager->registerSignal('aspectableSetOrder', AspectVariable::T_SIGNAL_EMIT_EVENT_INIT, 500, [new inventory, 'update'] );
  27.     $manager->registerSignal('aspectableSetOrder', AspectVariable::T_SIGNAL_EMIT_EVENT_INIT, 600, [new Service, 'sendmail'] );
  28.     $manager->registerSignal('aspectableSetOrder', AspectVariable::T_SIGNAL_EMIT_EVENT_INIT, 700, [new dropshipper, 'notify'] );
  29.     $manager->order = new Order;
  30.     $manager->result();
  31.     /*
  32.         array(3) {
  33.           ["method"]=>
  34.           string(27) "root\AspectVariable::result"
  35.           ["results"]=>
  36.           array(1) {
  37.             ["aspectableSetOrder"]=>
  38.             array(1) {
  39.               ["ILLI\Core\Object\I_Signal::T_SIGNAL_EMIT_EVENT_INIT"]=>
  40.               array(3) {
  41.                 [500]=>
  42.                 string(43) "Inventory updated: List of ordered products"
  43.                 [600]=>
  44.                 string(47) "receipt has been sent: List of ordered products"
  45.                 [700]=>
  46.                 string(44) "dropshipper notify: List of ordered products"
  47.               }
  48.             }
  49.           }
  50.           ["order"]=>
  51.           object(root\Order)#11 (0) {
  52.           }
  53.         }
  54.     */
  55.    
  56.     class AspectMethod Extends \ILLI\Core\Object
  57.     {
  58.         public function setOrder(Order $order)
  59.         {
  60.             var_dump(__METHOD__);
  61.            
  62.             return $this->methodAspect
  63.             (
  64.                 __FUNCTION__,
  65.                 func_get_args(),
  66.                 function($order) // proto setOrder
  67.                 {
  68.                     var_dump($this->__Core_Object_T_Signal_results);
  69.                 }
  70.             );
  71.         }
  72.     }
  73.    
  74.     $manager = new AspectMethod;
  75.     $manager->registerSignal('setOrder', AspectMethod::T_SIGNAL_EMIT_EVENT_INIT, 500, [new inventory, 'update'] );
  76.     $manager->registerSignal('setOrder', AspectMethod::T_SIGNAL_EMIT_EVENT_INIT, 600, [new Service, 'sendmail'] );
  77.     $manager->registerSignal('setOrder', AspectMethod::T_SIGNAL_EMIT_EVENT_INIT, 700, [new dropshipper, 'notify'] );
  78.     $manager->setOrder(new Order);
  79.     /*
  80.         string(27) "root\AspectMethod::setOrder"
  81.         array(1) {
  82.           ["setOrder"]=>
  83.           array(1) {
  84.             ["ILLI\Core\Object\I_Signal::T_SIGNAL_EMIT_EVENT_INIT"]=>
  85.             array(3) {
  86.               [500]=>
  87.               string(43) "Inventory updated: List of ordered products"
  88.               [600]=>
  89.               string(47) "receipt has been sent: List of ordered products"
  90.               [700]=>
  91.               string(44) "dropshipper notify: List of ordered products"
  92.             }
  93.           }
  94.         }
  95.     */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement