private static function kintParser::_parse_object in Devel 8
Same name and namespace in other branches
- 8.2 kint/kint/inc/kintParser.class.php \kintParser::_parse_object()
File
- kint/kint/inc/kintParser.class.php, line 405
Class
- kintParser
Code
private static function _parse_object(&$variable, kintVariableData $variableData) {
if (function_exists('spl_object_hash')) {
$hash = spl_object_hash($variable);
}
else {
ob_start();
var_dump($variable);
preg_match('[#(\\d+)]', ob_get_clean(), $match);
$hash = $match[1];
}
$castedArray = (array) $variable;
$variableData->type = get_class($variable);
$variableData->size = count($castedArray);
if (isset(self::$_objects[$hash])) {
$variableData->value = '*RECURSION*';
return false;
}
if (self::_checkDepth()) {
$variableData->extendedValue = "*DEPTH TOO GREAT*";
return false;
}
if ($variableData->type === 'ArrayObject' || is_subclass_of($variable, 'ArrayObject')) {
$arrayObjectFlags = $variable
->getFlags();
$variable
->setFlags(ArrayObject::STD_PROP_LIST);
}
self::$_objects[$hash] = true;
$reflector = new ReflectionObject($variable);
if (Kint::enabled() === Kint::MODE_RICH && Kint::$fileLinkFormat && $reflector
->isUserDefined()) {
$url = Kint::getIdeLink($reflector
->getFileName(), $reflector
->getStartLine());
$class = strpos($url, 'http://') === 0 ? 'class="kint-ide-link" ' : '';
$variableData->type = "<a {$class}href=\"{$url}\">{$variableData->type}</a>";
}
$variableData->size = 0;
$extendedValue = array();
$encountered = array();
foreach ($castedArray as $key => $value) {
if ($key[0] === "\0") {
$access = $key[1] === "*" ? "protected" : "private";
$key = substr($key, strrpos($key, "\0") + 1);
}
else {
$access = "public";
}
$encountered[$key] = true;
$output = kintParser::factory($value, self::escape($key));
$output->access = $access;
$output->operator = '->';
$extendedValue[] = $output;
$variableData->size++;
}
foreach ($reflector
->getProperties() as $property) {
$name = $property->name;
if ($property
->isStatic() || isset($encountered[$name])) {
continue;
}
if ($property
->isProtected()) {
$property
->setAccessible(true);
$access = "protected";
}
elseif ($property
->isPrivate()) {
$property
->setAccessible(true);
$access = "private";
}
else {
$access = "public";
}
$value = $property
->getValue($variable);
$output = kintParser::factory($value, self::escape($name));
$output->access = $access;
$output->operator = '->';
$extendedValue[] = $output;
$variableData->size++;
}
if (isset($arrayObjectFlags)) {
$variable
->setFlags($arrayObjectFlags);
}
if ($variableData->size) {
$variableData->extendedValue = $extendedValue;
}
}