>>} */ private $members; /** * @var null|array {union>} */ private $order; /** * @param array $members {map>>} */ public function __construct( array $members ) { $this->members = $members; $dependencies = []; foreach ($this->members as $name => $stuff) { $dependencies[$name] = $stuff['dependencies']; } $this->order = \alveolata\algorithm\topsort($dependencies); } /** * [implementation] * @author Christian Fraß */ function setup( ) : void { foreach ($this->order as $name) { $this->members[$name]['module']->setup(); } } /** * [implementation] * @author Christian Fraß */ function teardown( ) : void { foreach (array_reverse($this->order) as $name) { $this->members[$name]['module']->teardown(); } } } ?>