/** * 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; }
/** * 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; }