我总是尝试在使用CF的函数内部时使用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@email.com">
是否每次编写变量时都要设置关键字,或者只是在函数中使用它时的第一个实例?
或者它和
一样<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@email.com">
答案 0 :(得分:5)
您使用的是哪个版本的ColdFusion?由于ColdFusion 9 local
是一个范围,因此没有必要专门创建它。
回答你的问题:所有函数局部变量都需要在函数的本地变量主动。 ColdFusion不会自动执行此操作。
有两种方法可以做到这一点。通过var
关键字:
var someVar = someValue;
或通过local
范围:
local.someVar = someValue;
您的示例中对于变量的含义感到困惑。鉴于此代码:
var myStruct = {};
myStruct.someKey = "some value";
在这个例子中myStruct
是变量。 myStruct.someKey
不是离散变量,它只是myStruct
变量的子键。所以这没有意义:
var myStruct = {};
var myStruct.someKey = "some value";
答案 1 :(得分:3)
您无需使用&#39; var&#39;本地&#39;中变量的关键字范围。因为&#39; local&#39;是一个结构,其所有成员都属于同一范围。
基本上是&#39; local&#39; struct只是一个容器,用于容纳必须位于函数本地范围内的所有变量。
<强>更新强>
CF9 local
的AS是一个显式范围,用于保存函数范围变量,而不声明它。通常我输入大写字母,但这是一个品味问题。
<cfset LOCAL.firstname = "steve">
<cfset LOCAL.lastname = "smith">
<cfset LOCAL.email = "email@email.com">
在Coldfusion 8中以及通常在函数顶部定义local
结构之前:
<cfset var LOCAL = structNew() />
但是,您可以为该结构选择任何其他名称。
答案 2 :(得分:0)
如果您没有使用本地范围,则每个变量只需使用一次关键字var
。
我在7.1版本中介绍了用户自定义函数。我不确定其他版本,但在那个版本中,在var
标记之后,在执行任何其他命令之前,您必须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>