示例#1
0
文件: Core.php 项目: asgrim/PHPPHP
function var_dump_internal(Executor $executor, Zval $arg, $indent = '')
{
    if ($arg->getValue() instanceof FunctionData) {
        return '';
    }
    $output = $indent;
    switch ($arg->getType()) {
        case 'NULL':
            $output .= 'NULL';
            break;
        case 'string':
            $length = strlen($arg->getValue());
            $output .= 'string(' . $length . ') "' . $arg->getValue() . '"';
            break;
        case 'integer':
            $output .= 'int(' . $arg->getValue() . ')';
            break;
        case 'double':
            $output .= 'float(' . $arg->getValue() . ')';
            break;
        case 'boolean':
            $output .= 'bool(' . ($arg->getValue() ? 'true' : 'false') . ')';
            break;
        case 'array':
            $array = $arg->getArray();
            $output .= 'array(' . count($array) . ") {\n";
            $newIndent = $indent . '  ';
            foreach ($array as $key => $value) {
                if (is_string($key)) {
                    $output .= $newIndent . "[\"{$key}\"]=>\n";
                } else {
                    $output .= $newIndent . "[{$key}]=>\n";
                }
                $output .= var_dump_internal($executor, $value, $newIndent);
            }
            $output .= $indent . "}";
            break;
        case 'object':
            $ci = $arg->getValue();
            $props = $ci->getProperties();
            $output = 'object(' . $ci->getClassEntry()->getName() . ')#' . $ci->getInstanceNumber();
            $output .= ' (' . count($props) . ") {\n";
            $newIndent = $indent . '  ';
            foreach ($props as $key => $value) {
                if (is_string($key)) {
                    $output .= $newIndent . "[\"{$key}\"]=>\n";
                } else {
                    $output .= $newIndent . "[{$key}]=>\n";
                }
                $output .= var_dump_internal($executor, $value, $newIndent);
            }
            $output .= $indent . "}";
            break;
    }
    return $output . "\n";
}