-2

オブジェクトを文字列に変換する小さな関数に取り組んでいます。オブジェクトが配列として値を持っている場合は簡単です。しかし、私のオブジェクトまたは配列が別のオブジェクトまたは配列としていくつかの値を持っている場合でも、この関数を機能させたいと思います。私はそれを非常に粗くしますので、専門家はそれを皆のために整頓するためにこれを助けてください。

私の機能:

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もオブジェクトである場合はどうなりますか?オブジェクトにメインオブジェクト内に他の多くのオブジェクトまたは配列がある場合でも、この関数を機能させるにはどうすればよいですか。

4

1 に答える 1

1

関数には、関数に配列が渡されるという1つの仮定に起因する欠陥があります。ただし、ご存知のとおり、これは保証されていません。

したがって、このような関数を設計するためのより良い方法は、入力について何も想定せず、次のように関数を再構築することです

function makeString( $value) {
    if( is_object( $value)) { }
    else if( is_array( $value)) { }
    else if( is_string( $value) || is_numeric( $value)) { }
    else { } // Resource, etc.
}
于 2013-01-13T18:41:09.440 に答える