@@ -102,14 +102,16 @@ public function getListenerPriority(string $eventName, $listener)
102
102
return null ;
103
103
}
104
104
105
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
105
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
106
106
$ listener [0 ] = $ listener [0 ]();
107
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
107
108
}
108
109
109
110
foreach ($ this ->listeners [$ eventName ] as $ priority => &$ listeners ) {
110
111
foreach ($ listeners as &$ v ) {
111
- if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure) {
112
+ if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure && 2 >= \count ( $ v ) ) {
112
113
$ v [0 ] = $ v [0 ]();
114
+ $ v [1 ] = $ v [1 ] ?? '__invoke ' ;
113
115
}
114
116
if ($ v === $ listener ) {
115
117
return $ priority ;
@@ -156,14 +158,16 @@ public function removeListener(string $eventName, $listener)
156
158
return ;
157
159
}
158
160
159
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
161
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
160
162
$ listener [0 ] = $ listener [0 ]();
163
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
161
164
}
162
165
163
166
foreach ($ this ->listeners [$ eventName ] as $ priority => &$ listeners ) {
164
167
foreach ($ listeners as $ k => &$ v ) {
165
- if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure) {
168
+ if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure && 2 >= \count ( $ v ) ) {
166
169
$ v [0 ] = $ v [0 ]();
170
+ $ v [1 ] = $ v [1 ] ?? '__invoke ' ;
167
171
}
168
172
if ($ v === $ listener ) {
169
173
unset($ listeners [$ k ], $ this ->sorted [$ eventName ], $ this ->optimized [$ eventName ]);
@@ -242,8 +246,9 @@ private function sortListeners(string $eventName)
242
246
243
247
foreach ($ this ->listeners [$ eventName ] as &$ listeners ) {
244
248
foreach ($ listeners as $ k => $ listener ) {
245
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
249
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
246
250
$ listener [0 ] = $ listener [0 ]();
251
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
247
252
}
248
253
$ this ->sorted [$ eventName ][] = $ listener ;
249
254
}
@@ -261,10 +266,11 @@ private function optimizeListeners(string $eventName): array
261
266
foreach ($ this ->listeners [$ eventName ] as &$ listeners ) {
262
267
foreach ($ listeners as &$ listener ) {
263
268
$ closure = &$ this ->optimized [$ eventName ][];
264
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
269
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
265
270
$ closure = static function (...$ args ) use (&$ listener , &$ closure ) {
266
271
if ($ listener [0 ] instanceof \Closure) {
267
272
$ listener [0 ] = $ listener [0 ]();
273
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
268
274
}
269
275
($ closure = \Closure::fromCallable ($ listener ))(...$ args );
270
276
};
0 commit comments