次のことができるようになりたいです。
$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にすべてのプロパティを追加します
ありがとう!
これは、あなたがそれをしたくなかった方法に沿ったものです...
$extended = (object) array_merge((array)$obj, (array)$obj2);
ただし、プロパティを反復処理する必要があるよりも少し良いと思います。
オブジェクトがstdClassのインスタンスである場合(それはあなたの場合です)、単純にオブジェクトを拡張できます...
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
$obj->message = $message;
$obj->subject = $subject;
....必要な数だけ。
stdClass
オブジェクトの1つで get_object_vars() を使用し、それらを反復処理して、他のオブジェクトに追加できます。
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
もっとエレガントだと思うかどうかわからない。
編集:同じ場所に実際に保存することについてけちではない場合は、 この回答を見てください非常によく似た質問 。
オブジェクトの複製を見てください http://php.net/manual/en/language.oop5.cloning.php