コード例 #1
0
 /**
  * the only public entry point to return a parsed representation of a variable
  *
  * @static
  *
  * @param      $variable
  * @param null $name
  *
  * @throws Exception
  * @return \kintParser
  */
 public static final function factory(&$variable, $name = null)
 {
     isset(self::$_customDataTypes) or self::_init();
     # save internal data to revert after dumping to properly handle recursions etc
     $revert = array('level' => self::$_level, 'objects' => self::$_objects);
     self::$_level++;
     $name = self::_escape($name);
     $varData = new kintVariableData();
     $varData->name = $name;
     # first parse the variable based on its type
     $varType = gettype($variable);
     $varType === 'unknown type' and $varType = 'unknown';
     # PHP 5.4 inconsistency
     $methodName = '_parse_' . $varType;
     # objects can be presented in a different way altogether, INSTEAD, not ALONGSIDE the generic parser
     if ($varType === 'object') {
         foreach (self::$_objectParsers as $parserClass) {
             $className = 'Kint_Objects_' . $parserClass;
             /** @var $object KintObject */
             $object = new $className();
             if (($alternatives = $object->parse($variable)) !== false) {
                 self::$_skipAlternatives = true;
                 $alternativeDisplay = new kintVariableData();
                 $alternativeDisplay->type = $object->name;
                 foreach ($alternatives as $name => $values) {
                     $alternative = kintParser::factory($values);
                     $alternative->type = $name;
                     if (Kint::$mode === 'text' || Kint::$mode === 'cli') {
                         $alternativeDisplay->extendedValue[] = $alternative;
                     } else {
                         empty($alternative->value) and $alternative->value = $alternative->extendedValue;
                         $alternativeDisplay->_alternatives[] = $alternative;
                     }
                 }
                 self::$_skipAlternatives = false;
                 return $alternativeDisplay;
             }
         }
     }
     # base type parser returning false means "stop processing further": e.g. recursion
     if (self::$methodName($variable, $varData) === false) {
         self::$_level--;
         return $varData;
     }
     if (Kint::$mode === 'rich' && !self::$_skipAlternatives) {
         # if an alternative returns something that can be represented in an alternative way, don't :)
         self::$_skipAlternatives = true;
         # now check whether the variable can be represented in a different way
         foreach (self::$_customDataTypes as $parserClass) {
             $className = 'Kint_Parsers_' . $parserClass;
             /** @var $parser kintParser */
             $parser = new $className();
             $parser->name = $name;
             # the parser may overwrite the name value, so set it first
             if ($parser->_parse($variable) !== false) {
                 $varData->_alternatives[] = $parser;
             }
         }
         # if alternatives exist, push extendedValue to their front and display it as one of alternatives
         if (!empty($varData->_alternatives) && isset($varData->extendedValue)) {
             $_ = new kintVariableData();
             $_->value = $varData->extendedValue;
             $_->type = $varData->type;
             $_->size = $varData->size;
             array_unshift($varData->_alternatives, $_);
             $varData->extendedValue = null;
         }
         self::$_skipAlternatives = false;
     }
     self::$_level = $revert['level'];
     self::$_objects = $revert['objects'];
     return $varData;
 }
コード例 #2
0
 /**
  * the only public entry point to return a parsed representation of a variable
  *
  * @static
  *
  * @param      $variable
  * @param null $name
  *
  * @throws Exception
  * @return \kintParser
  */
 public static final function factory(&$variable, $name = null)
 {
     isset(self::$_customDataTypes) or self::_init();
     # save internal data to revert after dumping to properly handle recursions etc
     $revert = array('level' => self::$_level, 'objects' => self::$_objects);
     self::$_level++;
     $name = self::_escape($name);
     $varData = new kintVariableData();
     $varData->name = $name;
     # first parse the variable based on its type
     $varType = gettype($variable);
     $varType === 'unknown type' and $varType = 'unknown';
     # PHP 5.4 inconsistency
     $methodName = '_parse_' . $varType;
     # base type parser returning false means "stop processing further": e.g. recursion
     if (self::$methodName($variable, $varData) === false) {
         self::$_level--;
         return $varData;
     }
     if (!self::$_skipAlternatives) {
         # if an alternative returns something that can be represented in an alternative way, don't :)
         self::$_skipAlternatives = true;
         # now check whether the variable can be represented in a different way
         foreach (self::$_customDataTypes as $parserClass) {
             $className = 'Kint_Parsers_' . $parserClass;
             /** @var $object kintParser */
             $object = new $className();
             $object->name = $name;
             # the parser may overwrite the name value, so set it first
             if ($object->_parse($variable) !== false) {
                 $varData->alternatives[] = $object;
             }
         }
         # combine extended values with alternative representations if applicable
         if (!empty($varData->alternatives) && isset($varData->extendedValue)) {
             $a = new kintVariableData();
             $a->value = $varData->extendedValue;
             $a->type = $varData->type;
             $a->size = $varData->size;
             array_unshift($varData->alternatives, $a);
             $varData->extendedValue = null;
         }
         self::$_skipAlternatives = false;
     }
     self::$_level = $revert['level'];
     self::$_objects = $revert['objects'];
     return $varData;
 }