1111 */
1212class PhpFormatter implements FormatterInterface
1313{
14+ /**
15+ * 2 space indentation for array formatting.
16+ */
17+ const INDENT = ' ' ;
18+
1419 /**
1520 * Format deployment configuration.
1621 * If $comments is present, each item will be added
@@ -21,9 +26,9 @@ class PhpFormatter implements FormatterInterface
2126 public function format ($ data , array $ comments = [])
2227 {
2328 if (!empty ($ comments ) && is_array ($ data )) {
24- return "<?php \nreturn array ( \n" . $ this ->formatData ($ data , $ comments ) . "\n) ; \n" ;
29+ return "<?php \nreturn [ \n" . $ this ->formatData ($ data , $ comments ) . "\n] ; \n" ;
2530 }
26- return "<?php \nreturn " . var_export ($ data , true ) . "; \n" ;
31+ return "<?php \nreturn " . $ this -> varExportShort ($ data , true ) . "; \n" ;
2732 }
2833
2934 /**
@@ -51,18 +56,43 @@ private function formatData($data, $comments = [], $prefix = ' ')
5156 $ elements [] = $ prefix . " */ " ;
5257 }
5358
54- $ elements [] = $ prefix . var_export ($ key, true ) . ' => ' .
55- (!is_array ($ value ) ? var_export ($ value, true ) . ', ' : '' );
59+ $ elements [] = $ prefix . $ this -> varExportShort ($ key ) . ' => ' .
60+ (!is_array ($ value ) ? $ this -> varExportShort ($ value ) . ', ' : '' );
5661
5762 if (is_array ($ value )) {
58- $ elements [] = $ prefix . 'array ( ' ;
63+ $ elements [] = $ prefix . '[ ' ;
5964 $ elements [] = $ this ->formatData ($ value , [], ' ' . $ prefix );
60- $ elements [] = $ prefix . ') , ' ;
65+ $ elements [] = $ prefix . '] , ' ;
6166 }
6267 }
6368 return implode ("\n" , $ elements );
6469 }
6570
6671 return var_export ($ data , true );
6772 }
73+
74+ /**
75+ * If variable to export is an array, format with the php >= 5.4 short array syntax. Otherwise use
76+ * default var_export functionality.
77+ *
78+ * @param mixed $var
79+ * @param integer $depth
80+ * @return string
81+ */
82+ private function varExportShort ($ var , int $ depth = 0 )
83+ {
84+ if (!is_array ($ var )) {
85+ return var_export ($ var , true );
86+ }
87+
88+ $ indexed = array_keys ($ var ) === range (0 , count ($ var ) - 1 );
89+ $ expanded = [];
90+ foreach ($ var as $ key => $ value ) {
91+ $ expanded [] = str_repeat (self ::INDENT , $ depth )
92+ . ($ indexed ? '' : $ this ->varExportShort ($ key ) . ' => ' )
93+ . $ this ->varExportShort ($ value , $ depth + 1 );
94+ }
95+
96+ return sprintf ("[ \n%s \n%s] " , implode (", \n" , $ expanded ), str_repeat (self ::INDENT , $ depth - 1 ));
97+ }
6898}
0 commit comments