dedlfix: assoziative Werte mit __set() und Index in numerisches array einfügen?

Beitrag lesen

Tach!

kann man mit der Interzeptor-Methode __set() auf irgend eine weise Werte in ein existierendes numerisches Array Property der Klasse Foobar einfügen?

Die Methode __set() eines Objekts wird aufgerufen, wenn auf nicht zugreifbare (zum Beispiel weil nicht existente) Eigenschaften zugegriffen wird. Was du dann tust, hat mit __set() nichts mehr zu tun. Dass du also auf Eigenschaften eines Arrays zugreifst, ist unabhängig von __set().

und das sowas machen?

$fb = new Foobar;
$fb->tok[ $i ] = [ 'fu' => 'baz' ];

In der zweiten Zeile findet zuerst ein Lesezugriff auf $fb->tok statt. Wenn das nicht existiert, wird erstmal __get() aufgerufen.

Der Zugriff auf $fb->tok[$i] hat nun nichts mehr mit dem Objekt in $fb zu tun, da greifen also keine magischen Methoden dieses Objekts mehr. Ein Zugriff der gezeigten Art kann nur klappen, wenn entweder tok existiert und ein Array oder String ist, oder wenn __get() ein Array oder String zurückgibt. Mit String wird es aber eine Notice geben und ein eher nicht erwartetes Ergebnis.

dedlfix.