Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6b5671f

Browse files
committed
[Messager] Simplified MessageBus::__construct()
The third path deals with generator (or other king of iterator that are not an IteratorAggregate). It means, very few cases in practice The previous code saved one object on the first call of `self::dispatch()` by replacing it at runtime. More over, this object (anon. class) is very light in memory. The performance optimization (even if fun) is not useful here. Let's make the code readable to everyone.
1 parent e07ed22 commit 6b5671f

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/Symfony/Component/Messenger/MessageBus.php

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,26 @@ public function __construct(iterable $middlewareHandlers = [])
3333
} elseif (\is_array($middlewareHandlers)) {
3434
$this->middlewareAggregate = new \ArrayObject($middlewareHandlers);
3535
} else {
36-
$this->middlewareAggregate = new class() {
37-
public $aggregate;
38-
public $iterator;
36+
// $this->middlewareAggregate should be an instance of IteratorAggregate.
37+
// When $middlewareHandlers is an Iterator, we wrap it to ensure it is lazy-loaded and can be rewound.
38+
$this->middlewareAggregate = new class($middlewareHandlers) implements \IteratorAggregate {
39+
private $middlewareHandlers;
40+
private $cachedIterator;
41+
42+
public function __construct($middlewareHandlers)
43+
{
44+
$this->middlewareHandlers = $middlewareHandlers;
45+
}
3946

4047
public function getIterator()
4148
{
42-
return $this->aggregate = new \ArrayObject(iterator_to_array($this->iterator, false));
49+
if (null === $this->cachedIterator) {
50+
$this->cachedIterator = new \ArrayObject(iterator_to_array($this->middlewareHandlers, false));
51+
}
52+
53+
return $this->cachedIterator;
4354
}
4455
};
45-
$this->middlewareAggregate->aggregate = &$this->middlewareAggregate;
46-
$this->middlewareAggregate->iterator = $middlewareHandlers;
4756
}
4857
}
4958

0 commit comments

Comments
 (0)