note 93524 deleted from function.get-defined-vars by danbrown

From: Date: Mon, 14 Sep 2009 16:56:27 +0000
Subject: note 93524 deleted from function.get-defined-vars by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-160552@lists.php.net to get a copy of this message
Note Submitter: Hadien at example dot com ---- I went ahead and expanded on kailashbadu's function. This recursive function will also print out the datatypes of the defined variables and encode all strings with htmlentities(), so that strings with html inside won't render in the browser. It also returns an Object's Classname, and its Property names, visiblities, and values. its roughly a mix of var_dump() and a Print_r() with <pre> tags inserted <?php $debug = true; function getDefinedVars($varlist, $excludeList=null, $indent =" ", $recursionlimit=4) { static $recursiveDepth=0; $excludeList = ($excludeList === null)?array('GLOBALS','_FILES','_COOKIE','_POST','_GET') :$excludeList; ++$recursiveDepth; // if $varlist is an array weed out any elements which keys match the $excludeList values if(is_array($varlist)) $varlist = array_diff_key($varlist, array_flip($excludeList)); else { --$recursiveDepth; return;} if($recursiveDepth==1) echo "Debugging :<pre>\n\n".str_repeat($indent,$recursiveDepth+1). "Defined Vars => <b>Array(".sizeof($varlist)."):</b>\n"; echo str_repeat($indent,$recursiveDepth+1)."{\n"; // prevent any possible infinite recursion loop if ($recursiveDepth>$recursionlimit) echo str_repeat($indent,$recursiveDepth+4)."*RECURSION LIMIT*\n"; else //else display each Variable's datatype and value foreach($varlist as $key => $value) { if(is_bool($value)) $type ="<b>Boolean:</b> ".(($value)?"true":"false"); elseif(is_int($value)) $type ="<b>Integer:</b> ".$value; elseif(is_float($value)) $type ="<b>Double:</b> ".$value; elseif(is_string($value)) $type ="<b>String(".strlen($value).'):</b> "'.htmlentities($value).'"'; elseif(is_array($value)) $type ="<b>Array(".sizeof($value)."):</b>"; elseif(is_object($value)) { $type ="<b>Object(".get_class($value)."):</b> "; $value = (array)$value; $searches = array('/^\0\*\0/','/\0[^\0*]+\0/'); $replace = array("Protected:","Private:"); foreach($value as $k => $v) { $new_key = preg_replace($searches,$replace,$k); $new_key = ($k == $new_key)?"Public:$k":$new_key; $new_array[$new_key] = $v; } $value =$new_array; } elseif(is_resource($value)) $type ="<b>resource:</b> ".$value; elseif(is_null($value)) $type ="<b>NULL</b>"; else $type ="<b>Unknown Type:</b> ".$value; echo str_repeat($indent,$recursiveDepth+2)."[".$key."]=> $type\n"; getDefinedVars($value, $excludeList,$indent,$recursionlimit); } echo str_repeat($indent,$recursiveDepth+1)."}\n\n"; if(--$recursiveDepth==0) echo "</pre>\n\n"; } $null_debug_test = null; $string_debug_test = "this is a test"; $array_debug_test = ""; $array_debug_test["array_debug_test"] = $array_debug_test; $array_debug_test["array_debug_test"] = $array_debug_test; $array_debug_test["array_debug_test"] = $array_debug_test; $array_debug_test["array_debug_test"] = $array_debug_test; $array_debug_test["array_debug_test"] = $array_debug_test; $array_debug_test["array_debug_test"] = $array_debug_test; class OBJ_test { public $pub_var; private $private_var; protected $Pro_var; function __construct() { $this->pub_var="foo"; $this->private_var="bar"; $this->Pro_var="monkey"; } } $obj = new OBJ_test(); if($debug) getDefinedVars(get_defined_vars()); else { /*output the actual page*/ } ?>

« previous php.notes (#160552) next »