Advertisement
fruffl

AOP/Injectable Object

Jan 13th, 2013
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.11 KB | None | 0 0
  1. array(1) {
  2.   ["data"]=>
  3.   &array(16) {
  4.     [0]=>
  5.     string(13) "Starting test"
  6.     [1]=>
  7.     string(19) "SIGNAL PRE_EVENT #1"
  8.     [2]=>
  9.     string(19) "SIGNAL PRE_EVENT #2"
  10.     [3]=>
  11.     string(14) "FILTER DATA #1"
  12.     [4]=>
  13.     string(14) "FILTER DATA #2"
  14.     [5]=>
  15.     string(27) "STARTING OUTER METHODFILTER"
  16.     [6]=>
  17.     string(27) "STARTING INNER METHODFILTER"
  18.     [7]=>
  19.     string(13) "## EXEC PROTO"
  20.     [8]=>
  21.     string(25) "ENDING INNER METHODFILTER"
  22.     [9]=>
  23.     string(25) "ENDING OUTER METHODFILTER"
  24.     [10]=>
  25.     string(16) "FILTER RESULT #1"
  26.     [11]=>
  27.     string(16) "FILTER RESULT #2"
  28.     [12]=>
  29.     string(18) "NOTIFY OBSERVER #1"
  30.     [13]=>
  31.     string(18) "NOTIFY OBSERVER #2"
  32.     [14]=>
  33.     string(20) "SIGNAL POST_EVENT #1"
  34.     [15]=>
  35.     string(20) "SIGNAL POST_EVENT #2"
  36.   }
  37. }
  38.  
  39.  
  40.     class foz EXTENDS \ILLI\Core\Collection
  41.     {  
  42.         public function baz($data)
  43.         {
  44.             return $this->prototype(__FUNCTION__, get_defined_vars());
  45.         }
  46.     }
  47.  
  48.     $foo = new foz([
  49.         '__filter' => [
  50.             'baz' =>
  51.             [
  52.                 'PARAMS' =>
  53.                 [
  54.                     function($data)
  55.                     {
  56.                         $data['data'][] = 'FILTER DATA #1';
  57.                         return $data;
  58.                     },
  59.                     function($data)
  60.                     {
  61.                         $data['data'][] = 'FILTER DATA #2';
  62.                         return $data;
  63.                     },
  64.                 ],
  65.                 'RESULT' =>
  66.                 [
  67.                     function($data)
  68.                     {
  69.                         $data['data'][] = 'FILTER RESULT #1';
  70.                         return $data;
  71.                     },
  72.                     function($data)
  73.                     {
  74.                         $data['data'][] = 'FILTER RESULT #2';
  75.                         return $data;
  76.                     },
  77.  
  78.                 ]
  79.             ]
  80.         ],
  81.        
  82.         '__signal' => [
  83.             'baz' =>
  84.             [
  85.                 'PRE_EVENT' =>
  86.                 [
  87.                     666 => function($data)
  88.                     {
  89.                         $data['data'][] = 'SIGNAL PRE_EVENT #1';
  90.                         return $data;
  91.                     },
  92.                     777     => function($data)
  93.                     {
  94.                         $data['data'][] = 'SIGNAL PRE_EVENT #2';
  95.                         return $data;
  96.                     }
  97.                 ],
  98.                 'POST_EVENT' =>
  99.                 [
  100.                     666 => function($data)
  101.                     {
  102.                         $data['data'][] = 'SIGNAL POST_EVENT #1';
  103.                         return $data;
  104.                     },
  105.                     777     => function($data)
  106.                     {
  107.                         $data['data'][] = 'SIGNAL POST_EVENT #2';
  108.                         return $data;
  109.                     }
  110.                 ]
  111.             ]
  112.         ],
  113.        
  114.         '__observer' => [
  115.             'baz' =>
  116.             [
  117.                 function($data)
  118.                 {
  119.                     $data['data'][] = 'NOTIFY OBSERVER #1';
  120.                     return $data;
  121.                 },
  122.                 function($data)
  123.                 {
  124.                     $data['data'][] = 'NOTIFY OBSERVER #2';
  125.                     return $data;
  126.                 },
  127.             ]
  128.         ],
  129.         '__classes' =>
  130.         [
  131.             'media' => '\ILLI\Net\Media',
  132.             'config' => '\ILLI\Net\Config',
  133.         ],
  134.         '__proto' =>
  135.         [
  136.             'baz' => function(&$data)
  137.             {
  138.                 $data[] = '## EXEC PROTO';
  139.                 return $data;
  140.             }
  141.         ]
  142.     ]);
  143.    
  144.     $foo->applyMethodFilter('baz', function(array $data = [], \ILLI\Core\Filter $chain)
  145.     {
  146.         $data['data'][] = 'STARTING OUTER METHODFILTER';
  147.         $chain->next($data, $chain);
  148.         $data['data'][] = 'ENDING OUTER METHODFILTER';
  149.         return $data;
  150.     });
  151.    
  152.     $foo->applyMethodFilter('baz', function(array $data = [], \ILLI\Core\Filter $chain)
  153.     {
  154.         $data['data'][] = 'STARTING INNER METHODFILTER';
  155.         $chain->next($data, $chain);
  156.         $data['data'][] = 'ENDING INNER METHODFILTER';
  157.         return $data;
  158.     });
  159.  
  160.  
  161.     $result = $foo->baz(['Starting test']);
  162.     var_dump($result);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement