PHP 自己實現var_dump函式

lotus_ruan發表於2021-09-09

private static $isInLoop = false;
private static $buffer = false;

public static function dumps()
{
    $args = func_get_args();
    $args_num = func_num_args();
    if (self::$buffer && $args_num == 1) {
        $args = func_get_args();
        $args = isset($args[0]) ? $args[0] : [];
        if (!empty($args) && (is_array($args) || is_object($args))) {
            $args_num = count($args);
        }
    }
    self::$buffer = false;
    for ($i = 0; $i  ";
        $index = $keys[$i];
        self::$isInLoop = true;
        self::dumps($arr[$index]);
    }
    array_pop($pads);
    $pad = implode('', $pads);
    echo "n{$pad}}";
    if ($pad == '') {
        echo "n";
    }
}

public static function dump_prop($obj)
{
    static $pads = [];
    $reflect = new ReflectionClass($obj);
    $prop = $reflect->getProperties();
    $len = count($prop);
    echo "($len) {";
    array_push($pads, "    ");
    for ($i = 0; $i isPublic()) {
            continue;
        }
        $prop_name = $prop[$index]->getName();
        echo "n", implode('', $pads), "["{$prop_name}"] => ";
        self::$isInLoop = true;
        self::dumps($prop[$index]->getValue($obj));
    }
    array_pop($pads);
    $pad = implode('', $pads);
    echo "n{$pad}}";
    if ($pad == '') {
        echo "n";
    }
}

public static function dump_object($obj)
{
    static $objId = 1;
    $className = get_class($obj);
    echo "object($className)#$objId";
    $objId++;
    self::dump_prop($obj);
}



dumps(new class(),"abc",111);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1762/viewspace-2803240/,如需轉載,請註明出處,否則將追究法律責任。

相關文章