20

私は次のことができるようになりたいです:

$obj = new stdClass;
$obj->status = "success";

$obj2 = new stdClass;
$obj2->message = "OK";

$obj2のプロパティが含まれるように$objを拡張するにはどうすればよいですか。例:

$obj->status //"success"

$obj->message // "OK"

配列を使用し、すべてのプロパティを配列に追加してから、それをオブジェクトにキャストして戻すことができることはわかっていますが、次のようなよりエレガントな方法があります。

extend($ obj、$ obj2); //$obj2から$objにすべてのプロパティを追加します

ありがとう!

4

4 に答える 4

32

これは、あなたがそれをやりたくなかったという彼らのやり方に沿ったものです。

$extended = (object) array_merge((array)$obj, (array)$obj2);

ただし、プロパティを反復処理するよりも少し良いと思います。

于 2010-04-16T12:12:19.950 に答える
12

オブジェクトがstdClassのインスタンスである場合(あなたの場合)、オブジェクトを次のように拡張できます...

$obj = new stdClass;
$obj->status = "success";

$obj2 = new stdClass;
$obj2->message = "OK";

$obj->message = $message;
$obj->subject = $subject;

....そしてあなたが望むだけ多く。

于 2012-08-07T10:32:28.787 に答える
5

オブジェクトの1つでget_object_vars()を使用stdClassし、それらを反復処理して、他のオブジェクトに追加することができます。

function extend($obj, $obj2) {
    $vars = get_object_vars($obj2);
    foreach ($vars as $var => $value) {
        $obj->$var = $value;
    }
    return $obj;
}

あなたがそれをもっとエレガントだと思うかどうかわからない、気に留めてください。

編集:実際に同じ場所にそれらを保存することにけちではない場合は、非常によく似た質問に対するこの回答を見てください。

于 2010-04-16T12:22:50.937 に答える
1

オブジェクトのクローン作成をご覧くださいhttp://php.net/manual/en/language.oop5.cloning.php

于 2010-04-16T11:58:54.237 に答える