<?php
##
## this file name is 'func.debug.php'
##
## example object
##
## [author]
##  - Chilbong Kim<san2(at)linuxchannel.net>
##
## [changes]
##  - 2003.07.11 : check is_array()
##  - 2003.03.07 : new build
##
## [references]
##
## [usage]
##
## [example]
##

## do not set to $GLOBALS in $array
## $GLOBALS dump : _var_dump(get_defined_vars())
##
function _var_dump($mixed$name=''$constants=0)
{
  if(
is_object($mixed))
  {
    
_object_dump($mixed,'$'.$var);
    return;
  }
  if(!
is_array($mixed))
  {
    echo (
$name '$'.$name.' = ' '').@htmlspecialchars($mixed)."<BR>\n";
    return;
  }

  
## $mixed is array
  ##
  
foreach($mixed AS $k=>$v)
  {
    
$var $name "${name}[\"$k\"]" $k;
    if(!
$constants$var '$'.$var;

    if(
is_array($v) && sizeof($v)>0)
    {
        echo 
"$var = ".$v."<BR>\n";
        echo 
"<UL>\n";
        
_var_dump($v,$var,1);
        echo 
"</UL>\n";
    }
    else if(
is_object($v))
    {
        echo 
"$var = ".$v."<BR>\n";
        
_object_dump($v,$var);
    }
    else echo 
"$var = ".@htmlspecialchars($v)."<BR>\n";
  }
}

function 
_object_dump($obj$name='')
{
  if(!
is_object($obj)) return;

  foreach(
$obj AS $k=>$v)
  {
    
$var $name $name.'->'.$k '->'.$k;
    echo 
"<UL>\n";
    if(
is_array($v)) _var_dump($v,$var,1);
    else if(
is_object($v)) _object_dump($v,$var);
    echo 
"</UL>\n";
  }
}

function 
_print_r($mixed)
{
  echo 
"<PRE>\n";
  
print_r($mixed);
  echo 
"</PRE>\n";
}

function 
_debug($key=31)
{
  if(
is_int($key)) {
    if(
$key<|| $key>31$key 31;
  } else {
    
$type = array('vars'=>1,'funcs'=>2,'cons'=>4,'class'=>8,'files'=>16);
    if(!
$key $type[$key]) $key 15;
  }

  
$bits strrev(decbin($key));

  echo 
"\n<DIV ALIGN='left'>\n";

  if(
$bits[0]) {
    echo 
"<P><B>VARIABLES :</B><P>\n";
    if(
preg_replace('/^([\d]+)\.([\d]+)\..+/','\\1\\2',PHP_VERSION) > 41) {
        
_var_dump($GLOBALS);
    } else {
        
_var_dump(get_defined_vars());
    }
  }
  if(
$bits[1]) {
    echo 
"\n<P><B>FUNCTIONS :</B><P>\n";
    
_print_r(get_defined_functions());
  }
  if(
$bits[2]) {
    echo 
"\n<P><B>CONSTANTS :</B><P>\n";
    
_var_dump(get_defined_constants(),'',1);
  }
  if(
$bits[3]) {
    echo 
"\n<P><B>CLASSES :</B><P>\n";
    foreach(
get_declared_classes() AS $v) {
        echo 
"<BR>class $v<BR>\n";
        echo 
"{<UL>\n";
        
_var_dump(get_class_vars($v));
        echo 
"</UL>}<BR>\n";
    }
  }
  if(
$bits[4]) {
    echo 
"\n<P><B>INCLUDED(or REQUIRED) FILES:</B><P>\n";
    foreach(
get_included_files() AS $v) echo "$v<BR>\n";
  }

  echo 
"\n</DIV>\n";
}

?>