dedlfix: Array in Unterprogramm erstellt, in zweitem weiterverarbeitet

Beitrag lesen

Tach!

Soll ich das array (leer) in der Hauptroutine definieren und dann jeweils als Parameter übergeben?

So ist es sinnvoll, wenn man nicht mit globalen Variablen arbeiten will.

Wird dabei das komplette array kopiert und an die Subroutinen übergeben oder nur der Verweis darauf,

Sowohl als auch. Für dich als Anwender sieht das wie eine Kopie aus. Alles außer Objekten wird per Kopie übergeben. Intern aber übergibt PHP zunächst eine Referenz, das macht es bei allen Variablen, nicht nur bei Arrays. Du hast damit zwar zwei Variablennamen, einen außen und einen funktionslokal, aber sie zeigen beide auf denselben Variablencontainer (der Wert und Typ und noch etwas verwaltungstechnischen Kleinkram speichert). Erst wenn sich der Inhalt ändert, wird ein zweiter Variablencontainer erstellt und dem jeweiligen Variablennamen zugeordnet.

Derick Rethans hat das mal in References in PHP: An In-Depth Look beschrieben. Seinen Artikel findet man, wenn auch versteckt im PHP-Handbuch verlinkt unter debug_zval_dump().

d.h. habe ich nach Rückkehr aus dem Unterprogramm das Original-Array tatsächlich geändert?

Nein, nur bei Referenzen. Also explizit damit arbeiten oder Objekte verwenden.

dedlfix.