2015-11-01 4 views
6

私はいつも内部でCFを使って機能するときにvarキーワードを使用しようとしますが、おそらく愚かな質問です。coldfusionのvarキーワードとそれを何度使用するのですか

例:それはあなたが関数内で使用する場合、それのキーワード、または単に最初のインスタンスを設定する必要が変数を書くたびの場合

<cfset var local = ""> <!-- set at the top of the function --> 

<!-- then later in the function --> 
<cfset var local.firstname = "steve"> 
<cfset var local.lastname = "smith"> 
<cfset var local.email = "[email protected]"> 

のですか?

それとも、あなたは「ローカル」スコープ内にある変数は「VAR」キーワードを使用する必要はありません

<cfset var local = ""> <!-- set at the top of the function --> 

<!-- then later in the function --> 
<cfset local.firstname = "steve"> 
<cfset local.lastname = "smith"> 
<cfset local.email = "[email protected]"> 

答えて

3

としてちょうど同じです。 'local'は構造体なので、そのメンバはすべて同じスコープの一部です。

基本的に 'local'構造体は、関数のローカルスコープ内になければならないすべての変数を保持するための単なるコンテナです。

UPDATE:CF9 localのAS あなたはあなたの関数がそれを宣言しなくても、変数のスコープを保持するために使用する明示的なスコープです。通常は大文字で入力しますが、それは味の問題です。

<cfset LOCAL.firstname = "steve"> 
<cfset LOCAL.lastname = "smith"> 
<cfset LOCAL.email = "[email protected]"> 

のColdFusion 8では、あなたは通常、あなたの関数の先頭にlocal構造体を定義する前に:あなたはその構造体の他の名前を選択することができますしかし

<cfset var LOCAL = structNew() /> 

+1

私は、彼らがローカル= ... '(CF9 +で導入された)正式LOCALスコープの代わりに、' VARを使用し、古いコードを見ている疑いがあります。 *実際の例はCF11では有効ではありません。 LOCALは正式な範囲(すなわち構造)です。そのシステム構造体を空の文字列で上書きしようとすると、エラーが発生します。 – Leigh

5

使用しているColdFusionのバージョンは? ColdFusion 9 localはスコープなので、具体的に作成する必要はありません。

質問に答えるには、すべての関数ローカル変数を関数に対してローカルにアクティブにする必要があります。 ColdFusionではこれが自動的に行われません。

これには2通りの方法があります。

var someVar = someValue; 

それともlocalスコープ経由:varキーワードを経て

local.someVar = someValue; 

あなたは変数が何であるかに関して、あなたの例で混乱しています。このコードを考える:このexamply myStruct

var myStruct = {}; 
myStruct.someKey = "some value"; 

を変数です。 myStruct.someKeyは離散変数ではなく、単にmyStruct変数のサブキーです。だから、これは意味がありません。

var myStruct = {}; 
var myStruct.someKey = "some value"; 
0

ローカルスコープを使用していない場合は、あなただけの変数ごとに一度キーワードvarを使用する必要があります。

バージョン7.1のユーザー定義関数に導入されました。他のバージョンについてはわかりませんが、他のコマンドが実行される前に、のすべての変数をcfargumentタグの直後に付ける必要がありました。言い換えれば、これは大丈夫だった。

<cffunction etc> 
<cfargument name = "arg1"> 
<cfset var x = 0> 
<cfquery> 
sql goes here 
</cfquery> 
<cfset x = 3> 

が、これはエラーをスローします:

<cffunction etc> 
<cfargument name = "arg1"> 

<cfquery> 
sql goes here 
</cfquery> 
<cfset var x = 3> 
関連する問題