In ColdFusion werden Variablen in welcher Reihenfolge aufgelöst?

7

Ich habe wenig Eindruck davon, dass Variablen die Reihenfolge auflösen, aber ich kann sie im CFML-Referenz- oder ColdFusion-Entwicklerhandbuch nicht finden. Kann jemand helfen?

    
user133580 20.07.2009, 08:11
quelle

2 Antworten

15

Es ist eine allgemein anerkannte Best Practice für immer , dass Sie Ihre Variablen aus zwei Hauptgründen betrachten:

  • Leistung - CF muss die Variable nicht finden, indem sie nacheinander die Bereiche durchsucht
  • Genauigkeit - Wenn zwei Variablen in verschiedenen Bereichen denselben Namen haben, erhalten Sie möglicherweise nicht die, die Sie erwartet haben

Das heißt, hier wird nach den Ordnungsvariablen-Bereichen gesucht:

  1. Funktion lokal (VAR-Schlüsselwort)
  2. Thread lokal (CTHTHREAD)
  3. Abfrageergebnisse
  4. Funktion ARGUMENTE
  5. Lokale VARIABLEN
  6. CGI-Variablen
  7. FILE-Variablen
  8. URL-Parameter
  9. FORM-Felder
  10. COOKIE-Werte
  11. CLIENT-Variablen

BEARBEITEN: Es wird auch darauf hingewiesen, welche Bereiche nicht durchsucht werden: SESSION, SERVER, APPLICATION

    
ale 20.07.2009, 13:17
quelle
18

Scope-Reihenfolge

Die kanonische Bereichsreihenfolge für ColdFusion 9 lautet:

  1. Local (nur in CFCs und UDFs)
  2. Argumente (nur in CFCs und UDFs)
  3. Thread lokal (nur innerhalb von Threads)
  4. Abfrage (nur innerhalb einer Abfrage-Schleife)
  5. Thread (nur innerhalb von Threads und Templates, die Threads aufrufen)
  6. Variablen
  7. CGI
  8. Cffile
  9. URL
  10. Formular
  11. Cookie
  12. Kunde

Sie können die Adobe-Dokumentation dazu in ColdFusion 9-Anwendungen entwickeln einsehen.

Einige Bereiche sind jedoch nur in bestimmten Kontexten verfügbar, sodass die Reihenfolge, in der Bereiche gesucht werden, je nach Kontext des Codes unterschiedlich ist.

Innerhalb von CFML (keine Themen)

  1. Variablen
  2. CGI
  3. Cffile
  4. URL
  5. Formular
  6. Cookie
  7. Kunde

Innerhalb eines CFC (keine Threads)

  1. Lokal
  2. Argumente
  3. Abfrage (nur innerhalb einer Abfrage-Schleife)
  4. Variablen
  5. CGI
  6. Cffile
  7. URL
  8. Formular
  9. Cookie
  10. Kunde

Best Practice

Wie Al Everett in seiner Antwort feststellt, wird es als Best Practice für immer Scope-Variablen angesehen. Explizites Scoping erzeugt weniger mehrdeutigen Code und ist normalerweise schneller. Jedes Mal, wenn Sie keine Variable definieren, riskieren Sie, eine Variable aus einem Bereich zu erhalten, die Sie nicht beabsichtigen.

  

Wenn sich die Variable, auf die Sie zugreifen, im ersten Bereich in der Suchreihenfolge befindet, ist es tatsächlich etwas schneller, die Variable nicht zu definieren. Dies liegt daran, dass jeder Punkt in einem Variablennamen geringe Kosten verursacht, wenn ColdFusion ihn auflöst. Zum Beispiel ist es in einer CFC-Methode etwas schneller, auf myVar als local.myVar zuzugreifen. Dies gilt nur für:

     
  • local umschriebene Variablen innerhalb eines CFC oder UDF
  •   
  • Thread local beschränkte Variablen innerhalb eines Threads
  •   
  • variables beschränkte Variablen in CFML
  •   

Unter allen anderen Umständen ist es schneller (und klarer), den Bereich explizit zu deklarieren.

     

Die Verwendung dieser Technik sollte als schlechte Praxis angesehen werden. Sie sollten diese Technik nur in performancekritischem Code verwenden, wo Sie garantieren können, dass die Variable immer im beabsichtigten Gültigkeitsbereich vorhanden ist. Denken Sie daran, dass es auf Kosten der Mehrdeutigkeit geht.

    
Rob Morris 11.01.2012 06:32
quelle

Tags und Links