Rolf B: Frage zurückgezogen, habe einen Fehler gemacht

Beitrag lesen

Hallo Linuchs,

JavaScript ist nicht PHP. Ein Array ist ein Objekt, und wenn Du in einer Variablen ein Array gespeichert zu haben glaubst, dann hast Du das gar nicht.

Das Array lümmelt sich statt dessen auf dem Heap herum, und in der Variablen steht ein Pointer darauf. Weist Du die Variable einer anderen Variablen zu, kopierst Du nur den Pointer und hast zwei Variablen mit einem Pointer auf's gleiche Array.

Und erst, wenn all diese Variablen aus ihrem Scope gepurzelt sind oder einen anderen Wert zugewiesen bekommen haben, kommt Garb H. Callegda[1] und holt den Arraymüll von der Halde herunter.

In PHP sind Arrays ebenfalls Objekte und lungern auf dem Heap herum, aber irgendwie kriegt PHP das mit, wenn mehrere Variablen auf ein Array verweisen, ohne dass eine Referenz erstellt wurde. Und sobald man dann etwas am Array verändert, bekommt die Variable, über die die Änderung durchgeführt wurde, eine Kopie des Arrays, so dass es in PHP so aussieht, als würden Arrays nicht per Referenz, sondern per Wert übergeben.

Rolf

--
sumpsi - posui - obstruxi

  1. Sprich es laut und hör gut zu 😉 ↩︎