J'aimerais pouvoir faire ce qui suit:
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
Comment puis-je étendre $ OBJ afin qu'il contienne les propriétés de $ obj2, par exemple:
$obj->status //"success"
$obj->message // "OK"
Je sais que je pourrais utiliser un tableau, ajoutez toutes les propriétés au tableau, puis jetez-la à l'objet, mais y a-t-il un moyen plus élégant, quelque chose comme ceci:
étendre ($ obj, $ obj2); // ajoute toutes les propriétés de $ obj2 à $ obj
Merci!
C'est plus le long des lignes de leur façon que vous ne vouliez pas le faire ....
$extended = (object) array_merge((array)$obj, (array)$obj2);
Cependant, je pense que ce serait un peu mieux que d'avoir à itération sur les propriétés.
si l'objet est l'instance de stdclass (c'est dans votre cas), vous pouvez simplement étendre votre objet comme ...
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
$obj->message = $message;
$obj->subject = $subject;
.... et autant que vous le souhaitez.
Vous pouvez utiliser get_Object_vars () sur l'un des objectifs stdClass
, itérale à travers ceux-ci et les ajoutez à l'autre:
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
Je ne sais pas si vous le juge plus élégant, pensez vous.
EDIT: Si vous n'êtes pas radingy à propos de Stockage les au même endroit, jetez un coup d'œil à cette réponse à une question très similaire .
regardez le clonage de l'objet http://php.net/manual/fr/language.oop5.cloning.php