note 93524 added to function.get-defined-vars
| From: | Hadien at example dot com | Date: | Mon, 14 Sep 2009 14:08:05 +0000 |
| Subject: | note 93524 added to function.get-defined-vars | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-160546@lists.php.net to get a copy of this message | ||
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*/
}
?>
----
Server IP: 208.69.120.35
Probable Submitter: 98.252.160.90
----
Manual Page -- http://www.php.net/manual/en/function.get-defined-vars.php
Edit -- https://master.php.net/note/edit/93524
Del: integrated -- https://master.php.net/note/delete/93524/integrated
Del: useless -- https://master.php.net/note/delete/93524/useless
Del: bad code -- https://master.php.net/note/delete/93524/bad+code
Del: spam -- https://master.php.net/note/delete/93524/spam
Del: non-english -- https://master.php.net/note/delete/93524/non-english
Del: in docs -- https://master.php.net/note/delete/93524/in+docs
Del: other reasons-- https://master.php.net/note/delete/93524
Reject -- https://master.php.net/note/reject/93524
Search -- https://master.php.net/manage/user-notes.php