fruffl icon

Signal in PHP

fruffl | 01/27/13 08:19:12 PM UTC | 0 ⭐ | 285 👁️ | Never ⏰ | []
PHP |

3.11 KB

|

None

|

0 👍

/

0 👎

    class Inventory     Extends \ILLI\Core\Object { public function update(Order $order){ return 'Inventory updated: '.$order->productlist(); } }
    class Service       Extends \ILLI\Core\Object { public function sendmail(Order $order) { return 'receipt has been sent: '.$order->productlist(); } }
    class Dropshipper   Extends \ILLI\Core\Object { public function notify(Order $order) { return 'dropshipper notify: '.$order->productlist(); } }
    
    class Order { public function productlist() { return 'List of ordered products'; } }
    
    class AspectVariable Extends \ILLI\Core\Object
    {
        // register aspectable property
        protected static $__autoConfig = ['order'];
        protected $order = NULL;
        
        public function result()
        {
            $results = $this->__Core_Object_T_Signal_results;
            $order = $this->order;
            $method = __METHOD__;
            
            var_dump(compact('method', 'results', 'order'));
        }
    }
    
    
    
    $manager = new AspectVariable;
    $manager->registerSignal('aspectableSetOrder', AspectVariable::T_SIGNAL_EMIT_EVENT_INIT, 500, [new inventory, 'update'] );
    $manager->registerSignal('aspectableSetOrder', AspectVariable::T_SIGNAL_EMIT_EVENT_INIT, 600, [new Service, 'sendmail'] );
    $manager->registerSignal('aspectableSetOrder', AspectVariable::T_SIGNAL_EMIT_EVENT_INIT, 700, [new dropshipper, 'notify'] );
    $manager->order = new Order;
    $manager->result();
    /*
        array(3) {
          ["method"]=>
          string(27) "root\AspectVariable::result"
          ["results"]=>
          array(1) {
            ["aspectableSetOrder"]=>
            array(1) {
              ["ILLI\Core\Object\I_Signal::T_SIGNAL_EMIT_EVENT_INIT"]=>
              array(3) {
                [500]=>
                string(43) "Inventory updated: List of ordered products"
                [600]=>
                string(47) "receipt has been sent: List of ordered products"
                [700]=>
                string(44) "dropshipper notify: List of ordered products"
              }
            }
          }
          ["order"]=>
          object(root\Order)#11 (0) {
          }
        }
    */
    
    class AspectMethod Extends \ILLI\Core\Object
    {
        public function setOrder(Order $order)
        {
            var_dump(__METHOD__);
            
            return $this->methodAspect
            (
                __FUNCTION__,
                func_get_args(),
                function($order) // proto setOrder
                {
                    var_dump($this->__Core_Object_T_Signal_results);
                }
            );
        }
    }
    
    $manager = new AspectMethod;
    $manager->registerSignal('setOrder', AspectMethod::T_SIGNAL_EMIT_EVENT_INIT, 500, [new inventory, 'update'] );
    $manager->registerSignal('setOrder', AspectMethod::T_SIGNAL_EMIT_EVENT_INIT, 600, [new Service, 'sendmail'] );
    $manager->registerSignal('setOrder', AspectMethod::T_SIGNAL_EMIT_EVENT_INIT, 700, [new dropshipper, 'notify'] );
    $manager->setOrder(new Order);
    /*
        string(27) "root\AspectMethod::setOrder"
        array(1) {
          ["setOrder"]=>
          array(1) {
            ["ILLI\Core\Object\I_Signal::T_SIGNAL_EMIT_EVENT_INIT"]=>
            array(3) {
              [500]=>
              string(43) "Inventory updated: List of ordered products"
              [600]=>
              string(47) "receipt has been sent: List of ordered products"
              [700]=>
              string(44) "dropshipper notify: List of ordered products"
            }
          }
        }
    */

Comments