89add31d0775b76536e5c8c46f3756668353b3ba
[GitHub/WoltLab/WCF.git] /
1 <?php
2 /**
3 * PHP-DI
4 *
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)
8 */
9
10 namespace DI\Definition\Dumper;
11
12 use DI\Definition\Definition;
13
14 /**
15 * Dispatch a definition to the appropriate dumper.
16 *
17 * @since 4.1
18 * @author Matthieu Napoli <matthieu@mnapoli.fr>
19 */
20 class DefinitionDumperDispatcher implements DefinitionDumper
21 {
22 /**
23 * Definition dumpers, indexed by the class of the definition they can dump.
24 *
25 * @var DefinitionDumper[]|null
26 */
27 private $dumpers = [];
28
29 public function __construct($dumpers = null)
30 {
31 $this->dumpers = $dumpers;
32 }
33
34 /**
35 * {@inheritdoc}
36 */
37 public function dump(Definition $definition)
38 {
39 $this->initialize();
40
41 $class = get_class($definition);
42
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',
46 $class
47 ));
48 }
49
50 $dumper = $this->dumpers[$class];
51
52 return $dumper->dump($definition);
53 }
54
55 private function initialize()
56 {
57 if ($this->dumpers === null) {
58 $this->dumpers = [
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(),
65 ];
66 }
67 }
68 }