从对象到人类可读文本

时间:2013-01-13 18:37:13

标签: php arrays string object human-readable

我正在研究一个将对象转换为字符串的小函数。如果对象具有值作为数组,则很容易。但我希望这个函数工作,即使我的对象或数组有一些值作为另一个对象或数组。我非常粗略,所以专家请帮助这个让每个人都很整洁。

我的功能:

function makeString($array)
{
    $outval = "";  
    foreach($array as $key=>$value) {
        if (is_object($value)) {
            $arr = array();
            $arr = get_object_vars($value);

            foreach($arr as $key1=>$value1){
                if(is_array($value1)) { 
                    $outval .= "\t\t$key1\n"; 
                    $outval .= makeString($value1);
                }  
                else {
                    $outval .= "\t$key1: $value1\n";
                } 

            }
        }
        if(is_array($value)) { 
            $outval .= "\t$key\n"; 
            $outval .= makeString($value);
        }  
        else {
            $outval .= "$key: $value\n";
        }  
    } 
    return $outval;  
}  

这部分在我的功能中重复出现:

...
    if (is_object($value)) {
        $arr = array();
        $arr = get_object_vars($value);

        foreach($arr as $key1=>$value1){
            if(is_array($value1)) { 
                $outval .= "\t\t$key1\n"; 
                $outval .= makeString($value1);
            }  
            else {
                $outval .= "\t$key1: $value1\n";
            } 

        }
    }
...

如果$ value1在这里也是一个对象怎么办?即使我的对象在主对象中有许多其他对象或数组,我该怎么做才能使这个功能工作。

1 个答案:

答案 0 :(得分:1)

你的函数有一个缺陷来自你的假设:该函数将被传递给一个数组。但是,正如您所知,这不能保证。

因此,设计这样一个函数的更好方法是假设有关输入的任何内容,并重构您的函数:

function makeString( $value) {
    if( is_object( $value)) { }
    else if( is_array( $value)) { }
    else if( is_string( $value) || is_numeric( $value)) { }
    else { } // Resource, etc.
}