网站建设资讯

NEWS

网站建设资讯

PHP实现var_dump函数

private static$isInLoop=false;
private static$buffer=false;

public static functiondumps()
{
   $args=func_get_args();
   $args_num=func_num_args();
   if(self::$buffer&&$args_num==1) {
       $args=func_get_args();
       $args=isset($args[0]) ?$args[0] : [];
       if(!empty($args) && (is_array($args) ||is_object($args))) {
           $args_num=count($args);
       }
   }
   self::$buffer=false;
   for($i=0;$i<$args_num; ++$i) {
       $param=$args[$i];
       $ptype=gettype($param);
       switch($ptype) {
           case"NULL":
               self::dump_null();
               break;
           case"boolean":
               self::dump_boolean($param);
               break;
           case"integer":
               self::dump_integer($param);
               break;
           case"double":
               self::dump_double($param);
               break;
           case"string":
               self::dump_string($param);
               break;
           case"array":
               self::dump_array($param);
               break;
           case"object":
               self::dump_object($param);
               break;
           case"resource":
               echo"resource";
               break;
           default:
               echo"unknown type";
       }
   }
}

public static functiondumpx()
{
   self::$buffer=true;
   ob_start();
   self::dumps(func_get_args());
   $var=ob_get_clean();
   return$var;
}

public static functiondump_null()
{
   echo"NULL";
   if(!self::$isInLoop) {
       echo"\";
   }
   self::$isInLoop=false;
}

public static functiondump_boolean($bool)
{
   if($bool) {
       echo"bool(true)";
   }else{
       echo"bool(false)";
   }
   if(!self::$isInLoop) {
       echo"\";
   }
   self::$isInLoop=false;
}

public static functiondump_integer($int)
{
   echo"int($int)";
   if(!self::$isInLoop) {
       echo"\";
   }
   self::$isInLoop=false;
}

public static functiondump_double($double)
{
   echo"float($double)";
   if(!self::$isInLoop) {
       echo"\";
   }
   self::$isInLoop=false;
}

public static functiondump_string($str)
{
   $len=strlen($str);
   $value="string($len)\"$str\"";
   echo$value;
   if(!self::$isInLoop) {
       echo"\";
   }
   self::$isInLoop=false;
}

public static functiondump_array($arr)
{
   static$pads= [];
   $keys=array_keys($arr);
   $len=count($arr);
   echo"array($len) {";
   array_push($pads,"    ");
   for($i=0;$i<$len;$i++) {
       echo"\",implode('',$pads),"[\"$keys[$i]\"] => ";
       $index=$keys[$i];
       self::$isInLoop=true;
       self::dumps($arr[$index]);
   }
   array_pop($pads);
   $pad=implode('',$pads);
   echo"{$pad}}";
   if($pad=='') {
       echo"\";
   }
}

public static functiondump_prop($obj)
{
   static$pads= [];
   $reflect=newReflectionClass($obj);
   $prop=$reflect->getProperties();
   $len=count($prop);
   echo"($len) {";
   array_push($pads,"    ");
   for($i=0;$i<$len;$i++) {
       $index=$i;
       if(!$prop[$index]->isPublic()) {
           continue;
       }
       $prop_name=$prop[$index]->getName();
       echo"\",implode('',$pads),"[\"{$prop_name}\"] => ";
       self::$isInLoop=true;
       self::dumps($prop[$index]->getValue($obj));
   }
   array_pop($pads);
   $pad=implode('',$pads);
   echo"{$pad}}";
   if($pad=='') {
       echo"\";
   }
}

public static functiondump_object($obj)
{
   static$objId=1;
   $className=get_class($obj);
   echo"object($className)#$objId";
   $objId++;
   self::dump_prop($obj);
}

标题名称:PHP实现var_dump函数
网址分享:http://cdweb.net/article/ipsish.html