Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coldfusion与非范围变量_Coldfusion - Fatal编程技术网

Coldfusion与非范围变量

Coldfusion与非范围变量,coldfusion,Coldfusion,我目前正在检查我的所有函数和组件是否存在未限定范围的变量。我正在使用一个名为“检查所有功能”的工具。给定以下代码,varscoper告诉我第4行的变量“input”是unscoped。这是真的吗?如果我修改参数变量,我是否需要确定其范围 <cfoutput>#testit(1)#</cfoutput> <cffunction name="testit"> <cfargument name="input"> <Cfset inp

我目前正在检查我的所有函数和组件是否存在未限定范围的变量。我正在使用一个名为“检查所有功能”的工具。给定以下代码,varscoper告诉我第4行的变量“input”是unscoped。这是真的吗?如果我修改参数变量,我是否需要确定其范围

<cfoutput>#testit(1)#</cfoutput>
<cffunction name="testit">
    <cfargument name="input">
    <Cfset input = 3>
    <cfreturn input>
</cffunction>
测试(1)# 仅供参考,如果我不更改函数varscoper4中的参数变量输入,则不会报告任何未定义范围的变量

<cfoutput>#testit(1)#</cfoutput>
    <cffunction name="testit">
    <cfargument name="input">
    <Cfset var output = 3 + input>
    <cfreturn output>
</cffunction>
测试(1)#
您应该使用参数。输入:

<cfset arguments.input = 3>
不要修改
参数
,让它们在到达时保持原样,以防以后要重新使用原始值


您应该使用参数。输入:

<cfset arguments.input = 3>
不要修改
参数
,让它们在到达时保持原样,以防以后要重新使用原始值


在第一个代码块中,输入是“unscoped”,但CF将其解释为参数作用域。CF总是试图通过查看优先级顺序来查找未划分范围的变量。你可以在这里找到更多关于这方面的信息:

您还可以通过转储不同的作用域并查看输出来查看它的外观

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset input = 3>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn input>
</cffunction>
测试(1)# 我强烈建议您将varscope工具的输出作为一个指南,指导您应该在哪里显式地定义变量的范围。在这种情况下,您的第一块代码如下所示。这是为了代码的清晰性和确定性

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset arguments.input = 3>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn arguments.input>
</cffunction>
测试(1)# 就个人而言,我不喜欢在函数和方法中设置或更改参数。我宁愿像在第二段代码中那样保持它们的完整性。但即使在那里,我也会显式地定义参数的范围,以便您知道它来自何处——即使不是由varscope标记的

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset var output = 3 + arguments.input>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn output>
</cffunction>
测试(1)# 如果不清楚的话,这里要添加的最后一件事是var作用域将所有内容都放在本地范围内。您也可以这样做,它在功能上等同于前面的代码块:

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset local.output = 3 + arguments.input>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn local.output>
</cffunction>
测试(1)#
在第一个代码块中,输入是“unscoped”,但CF将其解释为参数作用域。CF总是试图通过查看优先级顺序来查找未划分范围的变量。你可以在这里找到更多关于这方面的信息:

您还可以通过转储不同的作用域并查看输出来查看它的外观

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset input = 3>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn input>
</cffunction>
测试(1)# 我强烈建议您将varscope工具的输出作为一个指南,指导您应该在哪里显式地定义变量的范围。在这种情况下,您的第一块代码如下所示。这是为了代码的清晰性和确定性

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset arguments.input = 3>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn arguments.input>
</cffunction>
测试(1)# 就个人而言,我不喜欢在函数和方法中设置或更改参数。我宁愿像在第二段代码中那样保持它们的完整性。但即使在那里,我也会显式地定义参数的范围,以便您知道它来自何处——即使不是由varscope标记的

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset var output = 3 + arguments.input>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn output>
</cffunction>
测试(1)# 如果不清楚的话,这里要添加的最后一件事是var作用域将所有内容都放在本地范围内。您也可以这样做,它在功能上等同于前面的代码块:

<cfoutput>#testit(1)#</cfoutput>

<cffunction name="testit">
    <cfargument name="input">
    <cfset local.output = 3 + arguments.input>
    <cfdump var="#variables#" label="variables">
    <cfdump var="#arguments#" label="arguments">
    <cfdump var="#local#" label="local">
    <cfreturn local.output>
</cffunction>
测试(1)#
有关CF查找正确范围的说明。如果你确定你的变量范围,CF将不必做这个搜索,你的应用程序将更加高效。请记住,您只需键入一次范围。我认为关于范围界定的另一个注意事项是,它可以使任何开发人员在以后可能不得不进入代码时更容易。函数可能是一个不好的例子,因为它们本身相当“包含”。一个常规的旧CFM页面引用#Foo#可能会让开发人员想知道“Foo”变量进入页面的目的是什么。。。意思是它应该来自表单、url、其他地方的集合等等。关于CF寻找正确范围的说明。如果你确定你的变量范围,CF将不必做这个搜索,你的应用程序将更加高效。请记住,您只需键入一次范围。我认为关于范围界定的另一个注意事项是,它可以使任何开发人员在以后可能不得不进入代码时更容易。函数可能是一个不好的例子,因为它们本身相当“包含”。一个常规的旧CFM页面引用#Foo#可能会让开发人员想知道“Foo”变量进入页面的目的是什么。。。意思是它应该来自一个表单、url、其他地方的集合等等。