Flo*_*rin 17 php properties object extend stdclass
我希望能够做到以下几点:
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
Run Code Online (Sandbox Code Playgroud)
如何扩展$ obj以使其包含$ obj2的属性,例如:
$obj->status //"success"
$obj->message // "OK"
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用数组,将所有属性添加到数组然后将其转换回对象,但有更优雅的方式,如下所示:
extend($ obj,$ obj2); //将$ obj2中的所有属性添加到$ obj
谢谢!
Chr*_*rez 24
这更符合他们不想做的方式....
$extended = (object) array_merge((array)$obj, (array)$obj2);
Run Code Online (Sandbox Code Playgroud)
但是我认为这比必须遍历属性要好一些.
如果对象是stdClass的实例(在您的情况下),您可以简单地扩展您的对象,如...
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
$obj->message = $message;
$obj->subject = $subject;
Run Code Online (Sandbox Code Playgroud)
....和你想要的一样多.
您可以在其中一个对象上使用get_object_vars()stdClass,遍历这些对象,并将它们添加到另一个对象:
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
Run Code Online (Sandbox Code Playgroud)
请注意,不确定你是否认为更优雅.
编辑:如果你并不吝啬实际存储它们在同一个地方,请看一个非常相似的问题的答案.