2017-11-20 3 views
-1

Ich versuche, ein Objekt zu erstellen, in dem die Eigenschaften des Objekts nicht direkt auf dem Objekt vorhanden sind, sondern durch eine statische Variable definiert und in einer $data-Eigenschaft gespeichert werden. durch den Benutzer von __get und __set. Es funktioniert gut, bis ich zu Objekten gelangt bin. Wegen des Problems mit rekursiven Objekten und ohne Zugriff auf Getter und Setter unter stdClass konnte ich intern die Werte des Objekts als Array speichern und in die Ausgabe umwandeln. Leider bekomme ich, wenn jemand etwas tut, wieFestlegen einer Objekteigenschaft als Array-Wert

$fleet->car->wheels = 4; 

sofort

Creating default object from empty value 

Es scheint darauf hinzudeuten, dass es versucht, den äußeren Satz (car->wheels) zuerst, dann die innere zu tun? Was für mich keinen Sinn ergibt. Logischerweise würde es zuerst versuchen, den Wert car von $fleet zu bekommen, dann versuche wheels zu setzen.

Darf ich falsch darüber nachdenken oder ist das nicht möglich? Ich weiß, dass die andere Lösung darin besteht, ein Objekt zu erstellen, das die Werte enthält, mit eigenen Getter/Settern, aber ich möchte so wenig Code wie möglich haben.

Der Mindest Code, dies zu sehen:

class Test 
{ 
    public function __set($key, $value) { 
     var_dump($key, $value); 
    } 
} 

$test = new Test(); 
$test->car->wheels = 4; 
+0

Dies ist eine interessante Frage. Können Sie eine [MCVE] (https://stackoverflow.com/help/mcve) bereitstellen – dan08

+1

Können Sie Ihre Klassencodes teilen –

Antwort

1

Das war ein Fehler in der Logik.

Wenn Sie {object}->{key1}->{key2} einstellen, erhalten Sie {object}->{key1}, und dann die Rückkehr von diesem. Die Tatsache, dass ich versuchte, einen Setzer zu verwenden, der nicht zündete, war natürlich, weil ein Wert in {key1} gesetzt wurde, aber nicht key1 selbst.

So

bekam das Hinzufügen
public function __get($key) { 
    $test = new stdClass(); 
    return $test; 
} 

des Fehlers zu befreien, weil zuerst eine neue stdClass für car erstellt wird, und dann wird 4-wheels gesetzt.

Verwandte Themen