@@ -49,7 +49,7 @@ private function dumpVar(mixed &$var, array $parents = [], int $level = 0, int $
4949 return $ this ->dumpLiteral ($ var , $ level );
5050
5151 } elseif (is_object ($ var )) {
52- return $ this ->dumpObject ($ var , $ parents , $ level );
52+ return $ this ->dumpObject ($ var , $ parents , $ level, $ column );
5353
5454 } elseif (is_resource ($ var )) {
5555 throw new Nette \InvalidArgumentException ('Cannot dump resource. ' );
@@ -136,12 +136,21 @@ private function dumpArray(array &$var, array $parents, int $level, int $column)
136136
137137
138138 /** @param array<mixed[]|object> $parents */
139- private function dumpObject (object $ var , array $ parents , int $ level ): string
139+ private function dumpObject (object $ var , array $ parents , int $ level, int $ column ): string
140140 {
141+ if ($ level > $ this ->maxDepth || in_array ($ var , $ parents , strict: true )) {
142+ throw new Nette \InvalidArgumentException ('Nesting level too deep or recursive dependency. ' );
143+ }
144+
141145 $ class = $ var ::class;
146+ $ parents [] = $ var ;
142147
143- if (in_array ($ class , [\DateTime::class, \DateTimeImmutable::class], strict: true )) {
144- return $ this ->format ("new \\$ class(?, new \\DateTimeZone(?)) " , $ var ->format ('Y-m-d H:i:s.u ' ), $ var ->getTimeZone ()->getName ());
148+ if ($ class === \DateTime::class || $ class === \DateTimeImmutable::class) {
149+ return $ this ->format (
150+ "new \\$ class(?, new \\DateTimeZone(?)) " ,
151+ $ var ->format ('Y-m-d H:i:s.u ' ),
152+ $ var ->getTimeZone ()->getName (),
153+ );
145154
146155 } elseif ($ var instanceof \UnitEnum) {
147156 return '\\' . $ var ::class . ':: ' . $ var ->name ;
@@ -159,9 +168,22 @@ private function dumpObject(object $var, array $parents, int $level): string
159168 } elseif ((new \ReflectionObject ($ var ))->isAnonymous ()) {
160169 throw new Nette \InvalidArgumentException ('Cannot dump anonymous class. ' );
161170
162- } elseif ($ level > $ this ->maxDepth || in_array ($ var , $ parents , strict: true )) {
163- throw new Nette \InvalidArgumentException ('Nesting level too deep or recursive dependency. ' );
171+ } elseif ($ class === \stdClass::class) {
172+ $ var = (array ) $ var ;
173+ return '(object) ' . $ this ->dumpArray ($ var , $ parents , $ level , $ column + 10 );
174+
175+ } else {
176+ return $ this ->dumpCustomObject ($ var , $ parents , $ level );
164177 }
178+ }
179+
180+
181+ /** @param array<mixed[]|object> $parents */
182+ private function dumpCustomObject (object $ var , array $ parents , int $ level ): string
183+ {
184+ $ class = $ var ::class;
185+ $ space = str_repeat ($ this ->indentation , $ level );
186+ $ out = "\n" ;
165187
166188 if (method_exists ($ var , '__serialize ' )) {
167189 $ arr = $ var ->__serialize ();
@@ -174,10 +196,6 @@ private function dumpObject(object $var, array $parents, int $level): string
174196 }
175197 }
176198
177- $ space = str_repeat ($ this ->indentation , $ level );
178- $ out = "\n" ;
179- $ parents [] = $ var ;
180-
181199 foreach ($ arr as $ k => &$ v ) {
182200 if (!isset ($ props ) || isset ($ props [$ k ])) {
183201 $ out .= $ space . $ this ->indentation
@@ -187,11 +205,7 @@ private function dumpObject(object $var, array $parents, int $level): string
187205 }
188206 }
189207
190- array_pop ($ parents );
191- $ out .= $ space ;
192- return $ class === \stdClass::class
193- ? "(object) [ $ out] "
194- : '\\' . self ::class . "::createObject( \\$ class::class, [ $ out]) " ;
208+ return '\\' . self ::class . "::createObject( \\$ class::class, [ $ out$ space]) " ;
195209 }
196210
197211
0 commit comments