diff vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php @ 12:7a779792577d

Update Drupal core to v8.4.5 (via Composer)
author Chris Cannam
date Fri, 23 Feb 2018 15:52:07 +0000
parents 4c8ae668cc8c
children
line wrap: on
line diff
--- a/vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php	Fri Feb 23 15:51:18 2018 +0000
+++ b/vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php	Fri Feb 23 15:52:07 2018 +0000
@@ -65,7 +65,7 @@
             ini_set('xdebug.var_display_max_depth', $maxDepth);
         }
 
-        $var = self::export($var, $maxDepth++);
+        $var = self::export($var, $maxDepth);
 
         ob_start();
         var_dump($var);
@@ -77,11 +77,11 @@
         $dumpText = ($stripTags ? strip_tags(html_entity_decode($dump)) : $dump);
 
         ini_set('html_errors', $html);
-        
+
         if ($echo) {
             echo $dumpText;
         }
-        
+
         return $dumpText;
     }
 
@@ -100,47 +100,86 @@
             $var = $var->toArray();
         }
 
-        if ($maxDepth) {
-            if (is_array($var)) {
-                $return = [];
-
-                foreach ($var as $k => $v) {
-                    $return[$k] = self::export($v, $maxDepth - 1);
-                }
-            } else if ($isObj) {
-                $return = new \stdclass();
-                if ($var instanceof \DateTime) {
-                    $return->__CLASS__ = "DateTime";
-                    $return->date = $var->format('c');
-                    $return->timezone = $var->getTimeZone()->getName();
-                } else {
-                    $reflClass = ClassUtils::newReflectionObject($var);
-                    $return->__CLASS__ = ClassUtils::getClass($var);
-
-                    if ($var instanceof Proxy) {
-                        $return->__IS_PROXY__ = true;
-                        $return->__PROXY_INITIALIZED__ = $var->__isInitialized();
-                    }
-
-                    if ($var instanceof \ArrayObject || $var instanceof \ArrayIterator) {
-                        $return->__STORAGE__ = self::export($var->getArrayCopy(), $maxDepth - 1);
-                    }
-
-                    foreach ($reflClass->getProperties() as $reflProperty) {
-                        $name  = $reflProperty->getName();
-
-                        $reflProperty->setAccessible(true);
-                        $return->$name = self::export($reflProperty->getValue($var), $maxDepth - 1);
-                    }
-                }
-            } else {
-                $return = $var;
-            }
-        } else {
-            $return = is_object($var) ? get_class($var)
+        if (! $maxDepth) {
+            return is_object($var) ? get_class($var)
                 : (is_array($var) ? 'Array(' . count($var) . ')' : $var);
         }
 
+        if (is_array($var)) {
+            $return = [];
+
+            foreach ($var as $k => $v) {
+                $return[$k] = self::export($v, $maxDepth - 1);
+            }
+
+            return $return;
+        }
+
+        if (! $isObj) {
+            return $var;
+        }
+
+        $return = new \stdclass();
+        if ($var instanceof \DateTimeInterface) {
+            $return->__CLASS__ = get_class($var);
+            $return->date = $var->format('c');
+            $return->timezone = $var->getTimezone()->getName();
+
+            return $return;
+        }
+
+        $return->__CLASS__ = ClassUtils::getClass($var);
+
+        if ($var instanceof Proxy) {
+            $return->__IS_PROXY__ = true;
+            $return->__PROXY_INITIALIZED__ = $var->__isInitialized();
+        }
+
+        if ($var instanceof \ArrayObject || $var instanceof \ArrayIterator) {
+            $return->__STORAGE__ = self::export($var->getArrayCopy(), $maxDepth - 1);
+        }
+
+        return self::fillReturnWithClassAttributes($var, $return, $maxDepth);
+    }
+
+    /**
+     * Fill the $return variable with class attributes
+     *
+     * @param object   $var
+     * @param stdClass $return
+     * @param int      $maxDepth
+     *
+     * @return mixed
+     */
+    private static function fillReturnWithClassAttributes($var, \stdClass $return, $maxDepth)
+    {
+        $reflClass = ClassUtils::newReflectionObject($var);
+        $parsedAttributes = array();
+        do {
+            $currentClassName = $reflClass->getName();
+
+            foreach ($reflClass->getProperties() as $reflProperty) {
+                $attributeKey = $reflProperty->isPrivate() ? $currentClassName . '#' : '';
+                $attributeKey .= $reflProperty->getName();
+
+                if (isset($parsedAttributes[$attributeKey])) {
+                    continue;
+                }
+
+                $parsedAttributes[$attributeKey] = true;
+
+                $name =
+                      $reflProperty->getName()
+                    . ($return->__CLASS__ !== $currentClassName || $reflProperty->isPrivate() ? ':' . $currentClassName : '')
+                    . ($reflProperty->isPrivate() ? ':private' : '')
+                    . ($reflProperty->isProtected() ? ':protected' : '')
+                ;
+
+                $reflProperty->setAccessible(true);
+                $return->$name = self::export($reflProperty->getValue($var), $maxDepth - 1);
+            }
+        } while ($reflClass = $reflClass->getParentClass());
+
         return $return;
     }