2015-08-17 17:00:26 -07:00
< ? php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
* LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license . For more information , see
* < http :// www . doctrine - project . org >.
*/
namespace Doctrine\Common\Util ;
use Doctrine\Common\Persistence\Proxy ;
/**
* Static class containing most used debug methods .
*
* @ link www . doctrine - project . org
* @ since 2.0
* @ author Guilherme Blanco < guilhermeblanco @ hotmail . com >
* @ author Jonathan Wage < jonwage @ gmail . com >
* @ author Roman Borschel < roman @ code - factory . org >
* @ author Giorgio Sironi < piccoloprincipeazzurro @ gmail . com >
*/
final class Debug
{
/**
* Private constructor ( prevents instantiation ) .
*/
private function __construct ()
{
}
/**
* Prints a dump of the public , protected and private properties of $var .
*
* @ link http :// xdebug . org /
*
* @ param mixed $var The variable to dump .
* @ param integer $maxDepth The maximum nesting level for object properties .
* @ param boolean $stripTags Whether output should strip HTML tags .
2015-10-08 11:40:12 -07:00
* @ param boolean $echo Send the dumped value to the output buffer
*
* @ return string
2015-08-17 17:00:26 -07:00
*/
2015-10-08 11:40:12 -07:00
public static function dump ( $var , $maxDepth = 2 , $stripTags = true , $echo = true )
2015-08-17 17:00:26 -07:00
{
2015-10-08 11:40:12 -07:00
$html = ini_get ( 'html_errors' );
if ( $html !== true ) {
ini_set ( 'html_errors' , true );
}
2015-08-17 17:00:26 -07:00
if ( extension_loaded ( 'xdebug' )) {
ini_set ( 'xdebug.var_display_max_depth' , $maxDepth );
}
$var = self :: export ( $var , $maxDepth ++ );
ob_start ();
var_dump ( $var );
2015-10-08 11:40:12 -07:00
2015-08-17 17:00:26 -07:00
$dump = ob_get_contents ();
2015-10-08 11:40:12 -07:00
2015-08-17 17:00:26 -07:00
ob_end_clean ();
2015-10-08 11:40:12 -07:00
$dumpText = ( $stripTags ? strip_tags ( html_entity_decode ( $dump )) : $dump );
2015-08-17 17:00:26 -07:00
2015-10-08 11:40:12 -07:00
ini_set ( 'html_errors' , $html );
if ( $echo ) {
echo $dumpText ;
}
return $dumpText ;
2015-08-17 17:00:26 -07:00
}
/**
* @ param mixed $var
* @ param int $maxDepth
*
* @ return mixed
*/
public static function export ( $var , $maxDepth )
{
$return = null ;
$isObj = is_object ( $var );
if ( $isObj && in_array ( 'Doctrine\Common\Collections\Collection' , class_implements ( $var ))) {
$var = $var -> toArray ();
}
if ( $maxDepth ) {
if ( is_array ( $var )) {
$return = array ();
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 )
: ( is_array ( $var ) ? 'Array(' . count ( $var ) . ')' : $var );
}
return $return ;
}
/**
* Returns a string representation of an object .
*
* @ param object $obj
*
* @ return string
*/
public static function toString ( $obj )
{
return method_exists ( $obj , '__toString' ) ? ( string ) $obj : get_class ( $obj ) . '@' . spl_object_hash ( $obj );
}
}