は私が頻繁に使用されるすべての3つの表記を見て、私は違いが両者の間にあるものを思ったんだけど:LOC、VAR、およびVARIABLESスコープに変数を宣言するのに違いはありますか?
<cfset var foo = "bar" />
<cfset local.foo = "bar" />
<cfset variables.foo = "bar" />
<cfset arguments.foo = "bar" />
は私が頻繁に使用されるすべての3つの表記を見て、私は違いが両者の間にあるものを思ったんだけど:LOC、VAR、およびVARIABLESスコープに変数を宣言するのに違いはありますか?
<cfset var foo = "bar" />
<cfset local.foo = "bar" />
<cfset variables.foo = "bar" />
<cfset arguments.foo = "bar" />
VARとローカル同じスコープであり、彼らが唯一の方法/機能をご利用いただけます彼らは宣言されています。ローカルスコープは、以前はメソッドに存在していた変数を作成するためにvarを使用していたCF 9の新機能です。
変数は、宣言されているcfcまたはcfmページ全体、および含まれているテンプレートで使用できます。
引数は、メソッド/関数に渡される引数に使用され、その中にのみ存在します。
@ "varとlocalは同じスコープです" - CF9(準拠エンジン)のみ。 CF8以前では、 "var local = structNew()"を最初に実行しない限り、localは変数スコープ内の構造体になります。 –
まず、私はあなたがlocal
スコープを意味すると思う、ないloc
(私はスコープを認識していないですloc
と呼ばれる)
<cfset var foo = "bar" />
<cfset local.foo = "bar" />
はまったく同じことになっています。可変それに定義されている関数内プライベートであろう。
変数のスコープは、CFC内で、(関数とは対照的に)CFCのインスタンス内の変数プライベートが作成され
CFC外私は、変数のスコープは、それがでcreataedされたテンプレートwhithinプライベートになると思い
、例えば、CFC機能は、これら2つの例を検討し、var
上local
を使用する理由あなたが思っている場合:。
<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
文のコードのいずれか少ないラインをカット! :)
私は役立つことを望む。
古いバージョンのColdFusionの場合、 '
Danielの回答の概要として、ローカルはColdFusion 9とRailoの有効なスコープです。 "loc"は有効なスコープではありません。変数 'loc.foo =' bar 'を設定すると、実際には変数を作成しています.loc.foo = 'bar'。 –