note 93524 added to function.get-defined-vars

From: 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

« previous php.notes (#160546) next »