web-dev-qa-db-ja.com

別のオブジェクトからstdClassオブジェクトにプロパティを追加する

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

$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にすべてのプロパティを追加します

ありがとう!

19
Florin

これは、あなたがそれをしたくなかった方法に沿ったものです...

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

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

24
Chris Gutierrez

オブジェクトがstdClassのインスタンスである場合(それはあなたの場合です)、単純にオブジェクトを拡張できます...

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

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

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

....必要な数だけ。

10
Mohit Mehta

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

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

もっとエレガントだと思うかどうかわからない。

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

5
pinkgothic

オブジェクトの複製を見てください http://php.net/manual/en/language.oop5.cloning.php

1
pinaki