示例#1
0
 /**
  * Dump implementation for JSON.
  * @param  mixed  variable to dump
  * @param  int    current recursion level
  * @return string
  */
 private function jsonDump(&$var, $level = 0)
 {
     if (is_bool($var) || is_null($var) || is_int($var) || is_float($var)) {
         return $var;
     } elseif (is_string($var)) {
         return Dumper::encodeString($var, $this->maxLength);
     } elseif (is_array($var)) {
         static $marker;
         if ($marker === NULL) {
             $marker = uniqid("", TRUE);
         }
         if (isset($var[$marker])) {
             return "…RECURSION…";
         } elseif ($level < $this->maxDepth || !$this->maxDepth) {
             $var[$marker] = TRUE;
             $res = array();
             foreach ($var as $k => &$v) {
                 if ($k !== $marker) {
                     $res[$this->jsonDump($k)] = $this->jsonDump($v, $level + 1);
                 }
             }
             unset($var[$marker]);
             return $res;
         } else {
             return " … ";
         }
     } elseif (is_object($var)) {
         $arr = (array) $var;
         static $list = array();
         if (in_array($var, $list, TRUE)) {
             return "…RECURSION…";
         } elseif ($level < $this->maxDepth || !$this->maxDepth) {
             $list[] = $var;
             $res = array("" => '(object) ' . get_class($var));
             foreach ($arr as $k => &$v) {
                 if ($k[0] === "") {
                     $k = substr($k, strrpos($k, "") + 1);
                 }
                 $res[$this->jsonDump($k)] = $this->jsonDump($v, $level + 1);
             }
             array_pop($list);
             return $res;
         } else {
             return " … ";
         }
     } elseif (is_resource($var)) {
         return 'resource ' . get_resource_type($var);
     } else {
         return 'unknown type';
     }
 }