@@ -35,7 +35,7 @@ public function dump($var): string
35
35
}
36
36
37
37
38
- private function dumpVar (&$ var , int $ level = 0 ): string
38
+ private function dumpVar (&$ var , array $ parents = [], int $ level = 0 ): string
39
39
{
40
40
if ($ var instanceof PhpLiteral) {
41
41
return (string ) $ var ;
@@ -47,10 +47,10 @@ private function dumpVar(&$var, int $level = 0): string
47
47
return $ this ->dumpString ($ var );
48
48
49
49
} elseif (is_array ($ var )) {
50
- return $ this ->dumpArray ($ var , $ level );
50
+ return $ this ->dumpArray ($ var , $ parents , $ level );
51
51
52
52
} elseif (is_object ($ var )) {
53
- return $ this ->dumpObject ($ var , $ level );
53
+ return $ this ->dumpObject ($ var , $ parents , $ level );
54
54
55
55
} elseif (is_resource ($ var )) {
56
56
throw new Nette \InvalidArgumentException ('Cannot dump resource. ' );
@@ -83,7 +83,7 @@ private function dumpString(string $var): string
83
83
}
84
84
85
85
86
- private function dumpArray (array &$ var , int $ level ): string
86
+ private function dumpArray (array &$ var , array $ parents , int $ level ): string
87
87
{
88
88
static $ marker ;
89
89
if ($ marker === null ) {
@@ -104,7 +104,7 @@ private function dumpArray(array &$var, int $level): string
104
104
105
105
foreach ($ var as $ k => &$ v ) {
106
106
if ($ k !== $ marker ) {
107
- $ item = ($ k === $ counter ? '' : $ this ->dumpVar ($ k, $ level + 1 ) . ' => ' ) . $ this ->dumpVar ($ v , $ level + 1 );
107
+ $ item = ($ k === $ counter ? '' : $ this ->dumpVar ($ k ) . ' => ' ) . $ this ->dumpVar ($ v, $ parents , $ level + 1 );
108
108
$ counter = is_int ($ k ) ? max ($ k + 1 , $ counter ) : $ counter ;
109
109
$ outInline .= ($ outInline === '' ? '' : ', ' ) . $ item ;
110
110
$ outWrapped .= "\t$ item, \n$ space " ;
@@ -117,7 +117,7 @@ private function dumpArray(array &$var, int $level): string
117
117
}
118
118
119
119
120
- private function dumpObject (&$ var , int $ level ): string
120
+ private function dumpObject (&$ var , array $ parents , int $ level ): string
121
121
{
122
122
if ($ var instanceof \Serializable) {
123
123
return 'unserialize( ' . $ this ->dumpString (serialize ($ var )) . ') ' ;
@@ -137,13 +137,12 @@ private function dumpObject(&$var, int $level): string
137
137
$ arr = (array ) $ var ;
138
138
$ space = str_repeat ("\t" , $ level );
139
139
140
- static $ list = [];
141
- if ($ level > $ this ->maxDepth || in_array ($ var , $ list , true )) {
140
+ if ($ level > $ this ->maxDepth || in_array ($ var , $ parents ?? [], true )) {
142
141
throw new Nette \InvalidArgumentException ('Nesting level too deep or recursive dependency. ' );
143
142
}
144
143
145
144
$ out = "\n" ;
146
- $ list [] = $ var ;
145
+ $ parents [] = $ var ;
147
146
if (method_exists ($ var , '__sleep ' )) {
148
147
foreach ($ var ->__sleep () as $ v ) {
149
148
$ props [$ v ] = $ props ["\x00* \x00$ v " ] = $ props ["\x00$ class \x00$ v " ] = true ;
@@ -152,11 +151,11 @@ private function dumpObject(&$var, int $level): string
152
151
153
152
foreach ($ arr as $ k => &$ v ) {
154
153
if (!isset ($ props ) || isset ($ props [$ k ])) {
155
- $ out .= "$ space \t" . $ this ->dumpVar ($ k, $ level + 1 ) . ' => ' . $ this ->dumpVar ($ v , $ level + 1 ) . ", \n" ;
154
+ $ out .= "$ space \t" . $ this ->dumpVar ($ k ) . ' => ' . $ this ->dumpVar ($ v, $ parents , $ level + 1 ) . ", \n" ;
156
155
}
157
156
}
158
157
159
- array_pop ($ list );
158
+ array_pop ($ parents );
160
159
$ out .= $ space ;
161
160
return $ class === 'stdClass '
162
161
? "(object) [ $ out] "
0 commit comments