Chris@0: . Chris@0: */ Chris@0: Chris@0: namespace Doctrine\Common\Util; Chris@0: Chris@0: use Doctrine\Common\Collections\Collection; Chris@0: use Doctrine\Common\Persistence\Proxy; Chris@0: Chris@0: /** Chris@0: * Static class containing most used debug methods. Chris@0: * Chris@0: * @link www.doctrine-project.org Chris@0: * @since 2.0 Chris@0: * @author Guilherme Blanco Chris@0: * @author Jonathan Wage Chris@0: * @author Roman Borschel Chris@0: * @author Giorgio Sironi Chris@0: */ Chris@0: final class Debug Chris@0: { Chris@0: /** Chris@0: * Private constructor (prevents instantiation). Chris@0: */ Chris@0: private function __construct() Chris@0: { Chris@0: } Chris@0: Chris@0: /** Chris@0: * Prints a dump of the public, protected and private properties of $var. Chris@0: * Chris@0: * @link http://xdebug.org/ Chris@0: * Chris@0: * @param mixed $var The variable to dump. Chris@0: * @param integer $maxDepth The maximum nesting level for object properties. Chris@0: * @param boolean $stripTags Whether output should strip HTML tags. Chris@0: * @param boolean $echo Send the dumped value to the output buffer Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function dump($var, $maxDepth = 2, $stripTags = true, $echo = true) Chris@0: { Chris@0: $html = ini_get('html_errors'); Chris@0: Chris@0: if ($html !== true) { Chris@0: ini_set('html_errors', true); Chris@0: } Chris@0: Chris@0: if (extension_loaded('xdebug')) { Chris@0: ini_set('xdebug.var_display_max_depth', $maxDepth); Chris@0: } Chris@0: Chris@0: $var = self::export($var, $maxDepth++); Chris@0: Chris@0: ob_start(); Chris@0: var_dump($var); Chris@0: Chris@0: $dump = ob_get_contents(); Chris@0: Chris@0: ob_end_clean(); Chris@0: Chris@0: $dumpText = ($stripTags ? strip_tags(html_entity_decode($dump)) : $dump); Chris@0: Chris@0: ini_set('html_errors', $html); Chris@0: Chris@0: if ($echo) { Chris@0: echo $dumpText; Chris@0: } Chris@0: Chris@0: return $dumpText; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @param mixed $var Chris@0: * @param int $maxDepth Chris@0: * Chris@0: * @return mixed Chris@0: */ Chris@0: public static function export($var, $maxDepth) Chris@0: { Chris@0: $return = null; Chris@0: $isObj = is_object($var); Chris@0: Chris@0: if ($var instanceof Collection) { Chris@0: $var = $var->toArray(); Chris@0: } Chris@0: Chris@0: if ($maxDepth) { Chris@0: if (is_array($var)) { Chris@0: $return = []; Chris@0: Chris@0: foreach ($var as $k => $v) { Chris@0: $return[$k] = self::export($v, $maxDepth - 1); Chris@0: } Chris@0: } else if ($isObj) { Chris@0: $return = new \stdclass(); Chris@0: if ($var instanceof \DateTime) { Chris@0: $return->__CLASS__ = "DateTime"; Chris@0: $return->date = $var->format('c'); Chris@0: $return->timezone = $var->getTimeZone()->getName(); Chris@0: } else { Chris@0: $reflClass = ClassUtils::newReflectionObject($var); Chris@0: $return->__CLASS__ = ClassUtils::getClass($var); Chris@0: Chris@0: if ($var instanceof Proxy) { Chris@0: $return->__IS_PROXY__ = true; Chris@0: $return->__PROXY_INITIALIZED__ = $var->__isInitialized(); Chris@0: } Chris@0: Chris@0: if ($var instanceof \ArrayObject || $var instanceof \ArrayIterator) { Chris@0: $return->__STORAGE__ = self::export($var->getArrayCopy(), $maxDepth - 1); Chris@0: } Chris@0: Chris@0: foreach ($reflClass->getProperties() as $reflProperty) { Chris@0: $name = $reflProperty->getName(); Chris@0: Chris@0: $reflProperty->setAccessible(true); Chris@0: $return->$name = self::export($reflProperty->getValue($var), $maxDepth - 1); Chris@0: } Chris@0: } Chris@0: } else { Chris@0: $return = $var; Chris@0: } Chris@0: } else { Chris@0: $return = is_object($var) ? get_class($var) Chris@0: : (is_array($var) ? 'Array(' . count($var) . ')' : $var); Chris@0: } Chris@0: Chris@0: return $return; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns a string representation of an object. Chris@0: * Chris@0: * @param object $obj Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function toString($obj) Chris@0: { Chris@0: return method_exists($obj, '__toString') ? (string) $obj : get_class($obj) . '@' . spl_object_hash($obj); Chris@0: } Chris@0: }