5 * @link http://php-di.org/
6 * @copyright Matthieu Napoli (http://mnapoli.fr/)
7 * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
10 namespace DI\Definition\Dumper;
12 use DI\Definition\Definition;
15 * Dispatch a definition to the appropriate dumper.
18 * @author Matthieu Napoli <matthieu@mnapoli.fr>
20 class DefinitionDumperDispatcher implements DefinitionDumper
23 * Definition dumpers, indexed by the class of the definition they can dump.
25 * @var DefinitionDumper[]|null
27 private $dumpers = [];
29 public function __construct($dumpers = null)
31 $this->dumpers = $dumpers;
37 public function dump(Definition $definition)
41 $class = get_class($definition);
43 if (! array_key_exists($class, $this->dumpers)) {
44 throw new \RuntimeException(sprintf(
45 'There is no DefinitionDumper capable of dumping this definition of type %s',
50 $dumper = $this->dumpers[$class];
52 return $dumper->dump($definition);
55 private function initialize()
57 if ($this->dumpers === null) {
59 'DI\Definition\ValueDefinition' => new ValueDefinitionDumper(),
60 'DI\Definition\FactoryDefinition' => new FactoryDefinitionDumper(),
61 'DI\Definition\DecoratorDefinition' => new DecoratorDefinitionDumper(),
62 'DI\Definition\AliasDefinition' => new AliasDefinitionDumper(),
63 'DI\Definition\ObjectDefinition' => new ObjectDefinitionDumper(),
64 'DI\Definition\EnvironmentVariableDefinition' => new EnvironmentVariableDefinitionDumper(),