Ich bin mir bewusst, dass JSON die Serialisierung von Funktionen nicht unterstützt, was vollkommen akzeptabel und sogar erwünscht ist. Meine Klassen werden derzeit als Wertobjekte für die Kommunikation mit JavaScript verwendet, und Funktionen hätten keine Bedeutung (und die regulären Serialisierungsfunktionen sind nicht verwendbar).
Da die Funktionalität in Bezug auf diese Klassen jedoch zunimmt, macht es Sinn, ihre Utility-Funktionen (wie in diesem Fall die save() eines Benutzers) innerhalb der eigentlichen Klasse zu kapseln. Dies bedeutet jedoch, dass es sich nicht mehr um reine Wertobjekte handelt, und hier stoße ich auf mein oben genanntes Problem.
Eine Idee hatte ich würde die Klassennamen in dem JSON-String angegeben hat, und würde wahrscheinlich am Ende wie folgt:
$string = '{"name": "testUser", "password": "testPassword", "class": "User"}';
$object = json_decode ($string);
$user = ($user->class) $object;
Und umgekehrt würde die Klasseneigenschaft während/nach dem json_encode wird Einstellung. Ich weiß, ein wenig verschachtelt, aber ich versuche nur, verwandten Code zusammen zu halten. Ich werde wahrscheinlich meine Utility-Funktionen wieder aus den Klassen nehmen; Der Ansatz des modifizierten Konstruktors erscheint ein wenig undurchsichtig und führt zu Problemen mit verschachtelten Objekten.
Ich weiß dies und jede zukünftige Rückmeldung zu schätzen.
function create(array $data)
{
$user = new User();
foreach($data as $k => $v) {
$user->$k = $v;
}
return $user;
}
Es ist nicht wie die Lösung, die Sie wollten, aber es wird Ihre Arbeit geleistet:
. JSON hat keine Möglichkeit zu codieren, welche Art von Objekt das Original war. – Powerlord