moin,
Schreib-/Lesezugriffe auf Eigenschaften eines Objektes (oder Variablen allgmein), die ein Array sind, greifen nur auf das Array selbst zu, nicht jedoch auf dessen Elemente. Das geht auch mit __get()/__set() nicht anders. Man kann also mit __set() nur ein ganzes Array hinzufügen, nicht aber auf dessen Elemente zugreifen. Das wäre nämlich ein Lesezugriff auf das Array mit anschließender Operation auf den Elementen.
Das habe ich im laufe dieses Forums begriffen :-).
Wenn du hingegen ein Array privat verwalten möchtest, und alle Zugriffe kontrolliert werden sollen, wäre das eher über die Implementation des Interfaces ArrayAccess zu erledigen.
soweit ich mir den Code angucke, ist es ähnlich wie bei Getters und Setters.
Das Beispiel machte etwas anderes als deine erste Frage war. Es setzte eine Eigenschaft, wenn deren Name 'array' war. Das war jedenfalls kein Array-Zugriff.
Das habe ich begriffen danke für den hinweis.
Es wäre vermutlich verständlicher gewesen, wenn du geschrieben hättest, was du eigentlich möchtest, und nicht nach Details zu etwas fragst, das du für die Lösung gehalten hast.
Ok ich versuche mein Problem ausdruck zu verleihen und mit Code Beispielen diese Frage zu begräftigen. Wenn da eine differenz bezüglich Code und Frage auftauchen, tuts mir leid. Leider fälls mir bei der formulierung der frage nicht auf 😕.
Deine jetzige Implementation von __set() macht etwas sehr unerwartetes. Es sieht aus, als ob du einer Eigenschaft Werte zuweist. In Wirklichkeit hängst du aber diese Werte an ein bestehendes Array an.
das ist mein Ziel gewesen.
Schon die Verwendung magischer Methoden ist etwas, das eine besondere Aufmerksamkeit beim Code-Leser benötigt, um zu verstehen, warum da keine Eigenschaften direkt verwendet werden.
Verstehe Danke für den Hinweis.
Sowas ist Aufgabe für eine Methode namens append(), nicht aber für Magie mit __set().
Ich glaube du hast meine Zielvorgabe nicht richtig verstanden:
- Es sollen bedingt Werte angehängt werden
- Es soll nicht verändert werden (WICHTIG)
- Es muss ein Objekt mit Properties sein
Konstanten des Objekts kann ich nicht machen, da es ja zur laufzeit variabel konstruiert wird.
lgmb