2010-11-22 10 views
2

は私が頻繁に使用されるすべての3つの表記を見て、私は違いが両者の間にあるものを思ったんだけど:LOC、VAR、およびVARIABLESスコープに変数を宣言するのに違いはありますか?

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

Danielの回答の概要として、ローカルはColdFusion 9とRailoの有効なスコープです。 "loc"は有効なスコープではありません。変数 'loc.foo =' bar 'を設定すると、実際には変数を作成しています.loc.foo = 'bar'。 –

答えて

13

VARローカル同じスコープであり、彼らが唯一の方法/機能をご利用いただけます彼らは宣言されています。ローカルスコープは、以前はメソッドに存在していた変数を作成するためにvarを使用していたCF 9の新機能です。

変数は、宣言されているcfcまたはcfmページ全体、および含まれているテンプレートで使用できます。

引数は、メソッド/関数に渡される引数に使用され、その中にのみ存在します。

+7

@ "varとlocalは同じスコープです" - CF9(準拠エンジン)のみ。 CF8以前では、 "var local = structNew()"を最初に実行しない限り、localは変数スコープ内の構造体になります。 –

1

まず、私はあなたがlocalスコープを意味すると思う、ないloc(私はスコープを認識していないですlocと呼ばれる)

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

はまったく同じことになっています。可変それに定義されている関数内プライベートであろう。

変数のスコープは、CFC内で、(関数とは対照的に)CFCのインスタンス内の変数プライベートが作成され

CFC外私は、変数のスコープは、それがでcreataedされたテンプレートwhithinプライベートになると思い

3

、例えば、CFC機能は、これら2つの例を検討し、varlocalを使用する理由あなたが思っている場合:。

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

    <cfset var myQuery = "" /> 

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

    <cfreturn myQuery /> 

</cffunction> 

まず、変数をvarとして宣言し、それを使用する必要があります。対比:

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

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

    <cfreturn local.myQuery /> 

</cffunction> 

基本的には、ループ変数やクエリなどのために、これらすべてのvar文のコードのいずれか少ないラインをカット! :)

私は役立つことを望む。

+1

古いバージョンのColdFusionの場合、 ''行を追加すると、この機能が再現されます。 –

関連する問題