c31b7b1f38d50f977a260ef476fcfd522cbf1235
[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\Debug;
13 use DI\Definition\ArrayDefinition;
14 use DI\Definition\Definition;
15 use DI\Definition\Helper\DefinitionHelper;
16
17 /**
18 * Dumps array definitions.
19 *
20 * @since 5.0
21 * @author Matthieu Napoli <matthieu@mnapoli.fr>
22 */
23 class ArrayDefinitionDumper implements DefinitionDumper
24 {
25 /**
26 * {@inheritdoc}
27 */
28 public function dump(Definition $definition)
29 {
30 if (! $definition instanceof ArrayDefinition) {
31 throw new \InvalidArgumentException(sprintf(
32 'This definition dumper is only compatible with ArrayDefinition objects, %s given',
33 get_class($definition)
34 ));
35 }
36
37 $str = '[' . PHP_EOL;
38
39 foreach ($definition->getValues() as $key => $value) {
40 if (is_string($key)) {
41 $key = "'" . $key . "'";
42 }
43
44 $str .= ' ' . $key . ' => ';
45
46 if ($value instanceof DefinitionHelper) {
47 $nestedDefinition = Debug::dumpDefinition($value->getDefinition(''));
48 $str .= $this->indent($nestedDefinition);
49 } else {
50 $str .= var_export($value, true);
51 }
52
53 $str .= ',' . PHP_EOL;
54 }
55
56 $str .= ']';
57
58 return $str;
59 }
60
61 private function indent($str)
62 {
63 return str_replace(PHP_EOL, PHP_EOL . " ", $str);
64 }
65 }