从另一个对象向stdClass对象添加属性

时间:2010-04-16 11:55:11

标签: php object properties extend stdclass

我希望能够做到以下几点:

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

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

如何扩展$ obj以使其包含$ obj2的属性,例如:

$obj->status //"success"

$obj->message // "OK"

我知道我可以使用数组,将所有属性添加到数组中然后将其转换回对象,但是有更优雅的方式,如下所示:

extend($ obj,$ obj2); //将$ obj2中的所有属性添加到$ obj

谢谢!

4 个答案:

答案 0 :(得分:24)

这更像是你不想做的事情......

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

但是我认为这比迭代属性要好一些。

答案 1 :(得分:10)

如果对象是stdClass的实例(在您的情况下),您可以简单地扩展您的对象...

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

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

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

....和你想要的一样多。

答案 2 :(得分:5)

您可以在其中一个stdClass对象上使用get_object_vars(),对其进行迭代,然后将其添加到另一个对象中:

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

不确定你是否认为更优雅,请注意。

编辑:如果你并不吝啬实际存储在同一个地方,请查看this answer to a very similar question

答案 3 :(得分:1)