ColdFusion 11:在<cfset>标记中使用#Receate#设置变量之间的区别

时间:2017-12-14 20:45:44

标签: coldfusion coldfusion-11

在传统的ColdFusion应用程序上工作时,我遇到了var checkedBoxes = WorkCenterGrid.Children.OfType<CheckBox>().Count(mo => mo.IsChecked == true); 标记在整个应用程序中的使用方式不匹配。使用评估运算符<cfset>并且不使用

设置相同的变量

我在应用程序范围

上遇到过这种情况
# #

on on variable scope ...

<cfset #application.test# = "test">
<cfset application.test = "test2">

做完

<cfset myvariable = 6> 
<cfset #myvariable# = 5>

所以它似乎确实引用了相同的变量。

我想知道是否有任何最佳做法/边缘情况/事情发生在幕后我需要注意......或者评估操作员在这种情况下做得不多?

(变量的确定范围?)

1 个答案:

答案 0 :(得分:2)

#告诉CFML解析器评估用它们包围的术语,在字符串中很有用。如果您在<cfloop array="#myArray#"...等标记属性中传递变量,或者希望避免"Hello #name#!"中的字符串连接或需要动态表达式(如<cfargument name="datetime" default="#now()#">),则需要它们。示例中的磅数不做任何事情,也不会影响性能。在不需要的时候使用磅是不好的做法。

确定范围很重要。一些范围是(部分)持久的(applicationrequestsession),其他范围是易变的(variableslocal)。这取决于具体情况。 variables中的cfcomponent是私有实例字段范围,而variables模板中的.cfm就像局部变量一样。要在函数中包含局部变量,请使用var关键字或local范围。 Have a look at the official documentation about all the scopes.

您应该指定范围,因为只要您通过搜索一组范围并选择具有匹配名称的第一个范围而忽略范围,ColdFusion就会尝试查找该变量。这有性能开销(但几乎可以忽略不计),并且由于出血变量会导致奇怪的问题。有些人(包括我在内)未在variables之外指定cfcomponent,因为它是默认范围。这取决于你。