2015-11-01 66 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]"> 

是它的每次你写你有一个函数中使用时设置它的关键词,或者只是一审可变时间的情况下?

或者只是一样

<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

你并不需要使用“无功”的关键字对处于“本地”范围内的变量。由于'本地'是一个结构,它的所有成员都是同一个范围的一部分。

基本上'本地'结构只是一个容器来容纳必须在函数的本地范围内的所有变量。

UPDATE: AS CF9 local的是,你用它来握住你的功能范围的变量,未声明的明确范围。通常我会输入大写字母,但这是一个品味问题。

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

ColdFusion的8,你通常会在你的函数的顶部定义local结构之前:

<cfset var LOCAL = structNew() /> 

但是你可以选择该结构的任何其他名称。

+1

我怀疑他们正在寻找的是使用'旧的代码变种本地= ...'代替正式的本地范围(以CF9 +介绍) 。 *所以你的第二个例子很好。*其实第二个例子在CF11中是无效的。 LOCAL是一个正式的范围(即结构)。试图用空字符串覆盖该系统结构会导致错误。 – Leigh

5

您正在使用哪种版本的ColdFusion?由于ColdFusion 9是一个范围,所以没有必要专门创建它。

要回答你的问题:所有函数局部变量都需要在函数中本地化。 ColdFusion不会自动执行此操作。

有两种方法可以做到这一点。通过var关键字:

var someVar = someValue; 

或通过local范围:

local.someVar = someValue; 

你在你的例子困惑,一个变量是什么。鉴于此代码:

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

在这种examply myStruct是可变的。 myStruct.someKey不是一个离散变量,它只是myStruct变量的一个子键。因此,这是没有意义的:如果你不使用局部范围

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

,你只需要使用关键字var每个变量一次。

我被介绍给7.1版的用户定义函数。我不确定其他版本,但在那个版本中,在执行任何其他命令之前,您必须在cfargument标签之后紧跟var的所有变量。换句话说,这是好的。

<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>