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