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" } } } */