@@ -111,14 +111,16 @@ public function getListenerPriority($eventName, $listener)
111
111
return null ;
112
112
}
113
113
114
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
114
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
115
115
$ listener [0 ] = $ listener [0 ]();
116
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
116
117
}
117
118
118
119
foreach ($ this ->listeners [$ eventName ] as $ priority => &$ listeners ) {
119
120
foreach ($ listeners as &$ v ) {
120
- if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure) {
121
+ if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure && 2 >= \count ( $ v ) ) {
121
122
$ v [0 ] = $ v [0 ]();
123
+ $ v [1 ] = $ v [1 ] ?? '__invoke ' ;
122
124
}
123
125
if ($ v === $ listener ) {
124
126
return $ priority ;
@@ -165,14 +167,16 @@ public function removeListener($eventName, $listener)
165
167
return ;
166
168
}
167
169
168
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
170
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
169
171
$ listener [0 ] = $ listener [0 ]();
172
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
170
173
}
171
174
172
175
foreach ($ this ->listeners [$ eventName ] as $ priority => &$ listeners ) {
173
176
foreach ($ listeners as $ k => &$ v ) {
174
- if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure) {
177
+ if ($ v !== $ listener && \is_array ($ v ) && isset ($ v [0 ]) && $ v [0 ] instanceof \Closure && 2 >= \count ( $ v ) ) {
175
178
$ v [0 ] = $ v [0 ]();
179
+ $ v [1 ] = $ v [1 ] ?? '__invoke ' ;
176
180
}
177
181
if ($ v === $ listener ) {
178
182
unset($ listeners [$ k ], $ this ->sorted [$ eventName ], $ this ->optimized [$ eventName ]);
@@ -271,8 +275,9 @@ private function sortListeners(string $eventName)
271
275
272
276
foreach ($ this ->listeners [$ eventName ] as &$ listeners ) {
273
277
foreach ($ listeners as $ k => $ listener ) {
274
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
278
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
275
279
$ listener [0 ] = $ listener [0 ]();
280
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
276
281
}
277
282
$ this ->sorted [$ eventName ][] = $ listener ;
278
283
}
@@ -290,10 +295,11 @@ private function optimizeListeners(string $eventName): array
290
295
foreach ($ this ->listeners [$ eventName ] as &$ listeners ) {
291
296
foreach ($ listeners as &$ listener ) {
292
297
$ closure = &$ this ->optimized [$ eventName ][];
293
- if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure) {
298
+ if (\is_array ($ listener ) && isset ($ listener [0 ]) && $ listener [0 ] instanceof \Closure && 2 >= \count ( $ listener ) ) {
294
299
$ closure = static function (...$ args ) use (&$ listener , &$ closure ) {
295
300
if ($ listener [0 ] instanceof \Closure) {
296
301
$ listener [0 ] = $ listener [0 ]();
302
+ $ listener [1 ] = $ listener [1 ] ?? '__invoke ' ;
297
303
}
298
304
($ closure = \Closure::fromCallable ($ listener ))(...$ args );
299
305
};
0 commit comments