Warum dynamische Variablen (Variablenvariablen) in PHP oder anderen Sprachen verwenden

8

Ich habe vor kurzem das Konzept der dynamischen Variablen in PHP eingeführt. Für mich scheint es, als würde die Verwendung dynamischer Variablen in einem Programm das Lesen / Verfolgen erschweren.

Kann mir jemand die Vorteile erklären und / oder ein einfaches Beispiel aus der realen Welt teilen, wenn eine dynamische Variable in PHP benötigt wird?

Wenn Sie sich fragen, was dynamische Variablen sind und wie sie funktionieren, lesen Sie diese Frage

    
ScottyG 24.08.2017, 16:23
quelle

2 Antworten

6

Ich hatte dafür gestimmt, diese Frage zu schließen (weil die Abstimmung zurückgezogen wurde), da ich davon überzeugt bin, dass sie subjektiv ist, aber ich denke, dass ich nach einer objektiven Antwort eine objektive Antwort geben kann.

Ein statischer Variablenname ist eine Zeichenfolge, die ein Token darstellt, das von der zugrunde liegenden Engine als Bezeichnung verwendet wird, um den Wert zu identifizieren, den die Variable darstellt (sehr sehr Laienbeschreibung).

Eine "Zeichenfolge" ist eine Zeichenfolge. Eine Zeichenfolge ist ein Ausdruck, der eine Zeichenfolge darstellt. Von daher steht es nahe, dass jeder Ausdruck, der eine Zeichenkette darstellt, gut genug sein sollte, um das Token darzustellen, das auf eine Variable verweist. Und dieser Ausdruck selbst könnte einer Variablen zugewiesen werden, und von dort erhält man dynamische Variablennamen.

Aber das haben Sie nicht gefragt. Sie haben gefragt: warum?

Es ist nicht Sache der Ersteller der Sprache, solche Fragen zu beantworten. Es ist ihre Aufgabe, über ihre Sprache eine einheitliche und vorhersehbare Programmierschnittstelle bereitzustellen. Es ist uniform , eine Zeichenfolge über einen Ausdruck darstellen zu können, der wiederum durch eine Variable repräsentiert werden kann. Arbeit erledigt.

Subjektiv könnte ich möglicherweise sehen, wo einige Daten aus einer externen Quelle importiert werden, und sogar das Schema der Daten ist dynamisch. Man könnte dies in einer Art generischer Objektweise darstellen, und es führt von dort aus, dass die Namen der Eigenschaften des Objekts auch dynamisch sein können. Ob dies ein guter Ansatz für das vorliegende Problem sein könnte oder nicht, ist völlig subjektiv und hängt von der Einschätzung des Entwicklers und der seiner Kollegen während der Code-Überprüfung ab.

Ein anderes Beispiel könnte sein, dass Sie etwas schlechten Spaghetti-Code geerbt haben, wo "Bedürfnisse müssen" und die dynamische Benennung - aus welchen Gründen auch immer - ein guter Ansatz ist.

Die Belastung von PHP endet mit der Bereitstellung des Mechanismus zum Schreiben des Codes; es spricht nicht mit der Qualität des Designs des besagten Codes. Dafür ist Code Review zuständig.

    
Adam Cameron 24.08.2017, 21:38
quelle
4

A variable variable , ist nur eine andere Form der Reflexion . Sie fragen grundsätzlich "Warum sollten Sie jemals eine Variable ändern wollen, wenn Sie sie vor der Laufzeit nicht kennen".

Obwohl technisch nicht das Gleiche, könnten Sie variable variable als eine andere Art von hash table (oder array in php) sehen. Die meisten variable variables könnten als hash table umgeschrieben werden, und Sie wären nicht überrascht. Aber wenn Sie vor und nach der Laufzeit mit einer Variablen arbeiten müssen, ist ein hash table vielleicht sogar noch scheuer.

Ein einfacher Anwendungsfall könnten Einstellungen sein, die von einem Benutzer geändert werden können. Beachten Sie, dass das folgende Beispiel unsicher ist, aber seinen Zweck demonstriert.

%Vor%

Dies ist nur ein Beispiel, ich habe ein anderes Beispiel in XHTML sanitizer for MediaWiki by Brion Vibber gefunden. Er verwendet viele Arrays in seinem Code und irgendwann musste er sie alle umdrehen. Er benutzte den folgenden Code:

%Vor%

Offensichtlich hätte er den folgenden Code schreiben können, aber ist das wirklich einfacher zu lesen?

%Vor%

Was auch einen anderen Anwendungsfall einführt: Was wäre, wenn ich dynamisch entscheiden möchte, welche Arrays gewendet werden sollen? In der Art variable variable kann ich einfach Elemente auf das Array schieben und sie umkehren, wenn die Zeit gekommen ist. Auf die "normale" Weise würde ich ein switch oder if benötigen, um das Array zu durchlaufen und dann jede Option hinzuzufügen manuell.

    
Hugo Delsing 07.09.2017 09:13
quelle