1 <?php
2 3 4 5 6 7
8
9 namespace Cross\Runtime;
10
11
12 use Closure;
13
14 15 16 17 18
19 class ClosureContainer
20 {
21 22 23
24 protected $actions;
25
26 function __construct()
27 {
28
29 }
30
31 32 33 34 35 36
37 function add($name, Closure $f)
38 {
39 $this->actions[$name] = $f;
40 }
41
42 43 44 45 46 47 48
49 function run($name, $params = array())
50 {
51 if (isset($this->actions[$name])) {
52 if (!is_array($params)) {
53 $params = array($params);
54 }
55 return call_user_func_array($this->actions[$name], $params);
56 }
57
58 return false;
59 }
60
61 62 63 64 65 66 67
68 function runOnce($name, $params = array())
69 {
70 static $cache = array();
71 if (isset($cache[$name])) {
72 return $cache[$name];
73 } elseif (isset($this->actions[$name])) {
74 if (!is_array($params)) {
75 $params = array($params);
76 }
77
78 $cache[$name] = call_user_func_array($this->actions[$name], $params);
79 return $cache[$name];
80 }
81
82 return false;
83 }
84
85 86 87 88 89 90 91
92 function has($name, & $closure = null)
93 {
94 if (isset($this->actions[$name])) {
95 $closure = $this->actions[$name];
96 return true;
97 }
98
99 return false;
100 }
101 }
102