2010-11-22 7 views
2

Ich sehe alle häufig verwendeten drei Notationen, und ich frage mich, was die Unterschiede zwischen ihnen:Gibt es einen Unterschied zwischen der Deklaration einer Variablen in den Bereichen LOC, VAR und VARIABLES?

<cfset var foo = "bar" /> 
<cfset local.foo = "bar" /> 
<cfset variables.foo = "bar" /> 
<cfset arguments.foo = "bar" /> 
+1

Wie Daniels Antwort skizziert, ist local ein gültiger Bereich in ColdFusion 9 und Railo. "loc" ist kein gültiger Bereich. Wenn Sie eine Variable 'loc.foo =' bar 'setzen; Sie erstellen tatsächlich Variablen.loc.foo = 'bar'. –

Antwort

13

var und lokalen sind der gleiche Umfang und sie sind nur auf die Methode/Funktion verfügbar in denen sie erklärt werden. Der lokale Bereich ist neu in CF 9, bevor Sie var zum Erstellen von Variablen verwendet haben, die nur in der Methode vorhanden waren.

Variablen steht für die gesamte cfc- oder cfm-Seite zur Verfügung, in der sie deklariert sind, sowie für alle enthaltenen Vorlagen.

Argumente wird für Argumente verwendet, die an eine Methode/Funktion übergeben werden und nur mit darin existieren.

+7

@ "var und local sind der gleiche Bereich" - nur in CF9 (-konformen Motoren). In CF8 oder früher wäre local eine Struktur im Variablenbereich, wenn Sie nicht zuerst "var local = structNew()" ausführen. –

1

Erstens denke ich, Sie local Umfang bedeuten, nicht loc (ich bin mir nicht bewusst einen Umfang loc genannt)

<cfset var foo = "bar" /> 
<cfset local.foo = "bar" /> 

angeblich genau das gleiche sein. Die Variable wird in der Funktion privaten sei es in definiert ist.

Die Variablen Umfang, innerhalb eines CFC, wird eine variable privaten innerhalb einer Instanz des CFC schaffen (in Bezug auf die Funktion gegen)

Außerhalb eines CFC denke ich, dass die Variablen Umfang whithin der Vorlage privat sein wird es in ist creataed

3

Wenn Sie sich fragen, warum local über var Verwendung in zum Beispiel eine CFC-Funktion, dann betrachten Sie diese beiden Beispiele:.

<cffunction name="foo" returntype="query" output="false"> 

    <cfset var myQuery = "" /> 

    <cfquery name="myQuery"> 
    select * from bar 
    </cfquery> 

    <cfreturn myQuery /> 

</cffunction> 

Zuerst müssen Sie die Variable als var deklarieren und dann verwenden. Kontrast mit:

<cffunction name="foo" returntype="query" output="false"> 

    <cfquery name="local.myQuery"> 
    select * from bar 
    </cfquery> 

    <cfreturn local.myQuery /> 

</cffunction> 

Im Wesentlichen alles schneidet diese var Anweisungen für Schleifenvariablen und Abfragen usw. Eine weniger Code-Zeile! :)

Ich hoffe, dass hilft.

+1

Bei älteren Versionen von ColdFusion wird durch Hinzufügen der Zeile '' diese Funktionalität erneut erstellt. –

Verwandte Themen