Пример #1
0
 /**
  * the only public entry point to return a parsed representation of a variable
  *
  * @static
  *
  * @param mixed       $variable
  * @param null|string $name
  *
  * @return KintParser
  */
 public static final function factory(&$variable, $name = null)
 {
     # save internal data to revert after dumping to properly handle recursions etc
     $revert = array('level' => self::$_level, 'objects' => self::$_objects);
     self::$_level++;
     $varData = new KintVariableData();
     $varData->name = $name;
     # first parse the variable based on its type
     $varType = gettype($variable);
     if ($varType === 'unknown type') {
         $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\\parsers\\objects\\Kint_Objects_' . $parserClass;
             /** @var $object KintObject */
             $object = new $className();
             if (($alternativeTabs = $object->parse($variable)) !== false) {
                 self::$_skipAlternatives = true;
                 $alternativeDisplay = new KintVariableData();
                 $alternativeDisplay->type = $object->name;
                 $alternativeDisplay->value = $object->value;
                 $alternativeDisplay->name = $name;
                 foreach ($alternativeTabs as $nameInner => $values) {
                     $alternative = self::factory($values);
                     $alternative->type = $nameInner;
                     if (Kint::enabled() === Kint::MODE_RICH) {
                         empty($alternative->value) and $alternative->value = $alternative->extendedValue;
                         $alternativeDisplay->_alternatives[] = $alternative;
                     } else {
                         $alternativeDisplay->extendedValue[] = $alternative;
                     }
                 }
                 self::$_skipAlternatives = false;
                 self::$_level = $revert['level'];
                 self::$_objects = $revert['objects'];
                 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 (!self::$_skipAlternatives && Kint::enabled() === Kint::MODE_RICH) {
         # 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\\custom\\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 = 'contents';
             $_->size = null;
             array_unshift($varData->_alternatives, $_);
             $varData->extendedValue = null;
         }
         self::$_skipAlternatives = false;
     }
     self::$_level = $revert['level'];
     self::$_objects = $revert['objects'];
     if (strlen($varData->name) > 80) {
         $varData->name = self::_substr($varData->name, 0, 37) . '...' . self::_substr($varData->name, -38, null);
     }
     return $varData;
 }
Пример #2
0
 /**
  * @return string
  */
 public static function wrapStart()
 {
     if (Kint::enabled() === Kint::MODE_PLAIN) {
         return '<pre class="-kint">';
     }
     return '';
 }