{对象|阵列|任何} 关于 PHP 中递归限制的字符串


{Object|Array|Anything} to string with respect to recursion limit in PHP?

PHP 中是否有一种简单的方法可以在不触发递归限制的情况下将任意复杂值放入字符串中?例如,传递一个巨大的嵌套对象并指定我只需要 2 个级别深度。

我想避免的是var_export或var_dump出现错误,即使这意味着我得到的输出不太准确。

谢谢!

澄清:我想使用字符串来记录使用情况,因此调试器不适用。

也许有一个超级类看起来像这样:

class Dumpable {
    function varDump($max_depth = 2) {
        return self::dump((array)$this, $max_depth);
    }
    public static function dump($arr, $max_depth = 2) {
        if( $max_depth > 0 ) {
            $new_arr = array();
            foreach( $arr as $key => $val ) {
                if( $val instanceof Dumpable) {
                    $new_arr[$key] = $val->varDump($max_depth-1);
                }
                elseif( is_object($val) ) {
                    $new_arr[$key] = self::dump((array)$val, $max_depth-1);
                }
                elseif( is_array($val) ) {
                    $new_arr[$key] = self::dump($val, $max_depth-1);
                }
                else {
                    $new_arr[$key] = $val;
                }
            }
            return $new_arr;
        }
        elseif(is_object($arr)) {
           return 'Object:'.get_class($arr).'...';
        }
        else {
            return 'array...';
        }
    }
    public function __toString() {
        return print_r($this->varDump(), true);
    }
}

然后,您可以在想要转储扩展 Dumpable 的对象时调用 var_dump( $my_dumpable_obj->varDump() );。如果你的服务器支持 php 5.4,最好在 Trait 中使用此函数。

我不知道

有什么直截了当的方法 - 只有相反的:使用 XDEBUG (http://xdebug.org/) 并使用 xdebug.var_display_max_depth 设置。

据我所知,XDEBUG比PHP做得更好var_dump...

如果你不需要可运行的代码,你可以使用print_r()它可以处理超过var_export()