Moin!
und was soll die sinnfreie, nein, sogar kontraproduktive Umkopiererei?
mal so eine Frage an die Profis: ist das eigentlich in PHP wirklich kontraproduktiv (insbesondere im Hinblick auf Performance)?
Da liegt schon der Gedankenfehler. Die Umkopiererei ist nicht primär aus Performancegründen kontraproduktiv, sondern weil sie Information verschleiert. In diesem Fall die Information, dass die umkopierten Variablenwerte in Wirklichkeit aus $_POST stammen.
Diese Info ist lebenswichtig, um zu erkennen, dass man mit benutzerdefinierten Werten operiert, die erstens besonders vorsichtig behandelt werden müssen und zweitens bei jeder Ausgabe kontextgerecht zu entschärfen sind.
Ich würde unüberlegt mit JA antworten, sofern die Variable einmal oder zweimal angesprochen wird. Aber genau so gibt es z.B. im Bereich Java viele Stimmen die sagen, anstatt mehrfach (insbesondere in Schleifen) auf das selbe Array-Element zuzugreifen möge man eine lokale Variable verwenden.
Gegen lokale Variablen ist ja nichts einzuwenden - aber das PHP-Beispiel verwendet ja eben gerade KEINE lokalen Variablen, sondern GLOBALE Variablen.
- Der Aufwand eine weitere Referenz zu erzeugen ist minimal, der Speichermehrbedarf ebenfalls
- Der Compiler kann die Situation erkennen und bestimmte CPU-Register für die Variable verwenden, in die das Array nicht reinpasst
- Der Zugriff auf ein Array erfordert, je nach Sprache, die Überprüfung gültiger Array-Grenzen, die für eine Variable nicht erforderlich ist
Mit Sicherheit wird irgendein Benchmark bei PHP-Skripten nachweisen, dass beständiger, millionenfacher Zugriff auf eine Arrayvariable tendentiell etwas langsamer abläuft, als der Zugriff auf eine "normale" Skalarvariable. Vermutlich wird der Unterschied umso größer, je größer das Array insgesamt ist, insbesondere in Abhängigkeit der existierenden Elemente sowie der Position des abgefragten Elements.
Aber dieses Ergebnis zum Anlaß zu nehmen, den einmaligen oder nur gering wiederholten Zugriff deshalb lieber auf eine Variablenkopie zu machen, und dadurch alle negativen Konsequenzen in Kauf zu nehmen, ist wirklich absolut sinnlose Mikrooptimierung, die unter dem Strich weder mehr Performance noch fehlerfreie Programme bringt.
- Sven Rautenberg
"Love your nation - respect the others."