J'ai un objet parent que j'utilise pour le CRUD général dans mes applications - il a des méthodes de récupération de base & pour ne pas avoir à les réintroduire dans tous mes objets. La plupart de mes objets enfants étendent cet objet de base. Cela a fonctionné correctement, mais je trouve un problème avec la récupération d'un objet enfant sérialisé. J'utilise une méthode "retrieve" dans l'objet parent qui crée une instance de l'enfant, puis se remplit à partir des propriétés de l'enfant non sérialisé - ce qui signifie qu'il peut "se désérialiser" l'objet. Seul le problème est le suivant: si l'objet enfant a une propriété protégée ou privée, l'objet parent ne peut pas le lire, il n'est donc pas détecté pendant la récupération. Je cherche donc une meilleure façon de "se désintégrer soi-même" ou un moyen de permettre à un objet parent de "voir" les propriétés protégées - mais seulement pendant le processus de récupération.PHP Accès aux propriétés privées d'un enfant dans le parent
Exemple de code:
BaseObject {
protected $someparentProperty;
public function retrieve() {
$serialized = file_get_contents(SOME_FILENAME);
$temp = unserialize($serialized);
foreach($temp as $propertyName => $propertyValue) {
$this->$propertyName = $propertyValue;
}
}
public function save() {
file_put_contents(SOME_FILENAME, serialize($this));
}
}
class ChildObject extends BaseObject {
private $unretrievableProperty;
public setProp($val) {
$this->unretrivableProperty = $val;
}
}
$tester = new ChildObject();
$tester->setProp("test");
$tester->save();
$cleanTester = new ChildObject();
$cleanTester->retrieve();
// $cleanTester->unretrievableProperty will not be set
ÉDITÉ: aurait dû dire propriétés enfant "privées" non protégés.
Merci. La méthode statique semble viable, mais pour le fait que certains des objets enfants doivent être instanciés, et pour effectuer un traitement avant de pouvoir trouver le nom de fichier, ils doivent être récupérés. Le __get est déjà utilisé, à peu près dans ce but - mais comme je parcours les propriétés de l'objet, le parent ne saura pas quelles propriétés demander. Je suppose que je dois regarder la méthode d'itération - merci pour le pointeur. – Hippyjim