我希望能够做到以下几点:
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
如何扩展 $obj 使其包含 $obj2 的属性,例如:
$obj->status //"success"
$obj->message // "OK"
我知道我可以使用数组,将所有属性添加到数组中,然后将其转换回对象,但是有没有更优雅的方法,如下所示:
扩展($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
对象上使用
get_object_vars(),迭代这些对象,然后将它们添加到另一个对象中:
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
请注意,不确定您是否认为这样更优雅。
编辑:如果您不吝惜将它们实际存储在同一个地方,请查看这个非常相似问题的答案。