我在我的应用程序中的每个动态值周围使用#
符号,在此处发布我的一些代码以获取帮助后,我被告知在许多地方无需使用#
例如<cfif>
陈述。
所以我已经开始删除#符号,直到我意识到我已经破坏了我的应用程序,因为我从value=""
标记的<cfprocparam>
属性中删除了#符号。
我很困惑:
#
符号是某些地方而不是其他地方(不使用它的好处是什么?)<cfif>
和<cfargument>
代码中不需要它们,<cfprocparam>
代码中是否突然需要它们?答案 0 :(得分:6)
没有不一致(或者很少:你引用的不一致是不一致的),只是你不理解规则(这是非常基本的)。这些都在文档中:“Using number signs”
简而言之,在CFML声明中,所有元素都被视为CFML,因此不需要特别标记它们。 EG:
<cfset myVar = someFunction(anArgument)>
myVar
,someFunction
和anArgument
除了CFML结构之外没有任何歧义,所以不需要这样做:
<cfset myVar = #someFunction(anArgument)#>
有些人倾向于这样做。
在文本的中间或字符串中,对于什么是文本以及什么是CFML存在歧义,因此需要使用井号来标记它们。 EG:
<cfset myVar = "The time is #now()#">
我们必须在那里使用pound-signs来消除now()
作为CFML语句的歧义,这不仅仅是字符串的一部分,例如:
<cfset myVar = "CFML has a function now() which returns the current timestamp">
同样:
<cfquery>
SELECT col1
FROM table2
WHERE col2 = #someValue#
</cfquery>
没有办法知道someValue
是一个变量而没有标记它。
基本上就是这样。这并不复杂。
答案 1 :(得分:2)
规则1:如果你在引号内,那么你正在推一个字符串。如果你想要替换,你使用#name#
规则2:如果您在<cfoutput>
内,则表示您正在生成一个字符串。
虽然可以写
<cfif "#name#" EQ "bob">Hi Bob</cfif>
写起来更容易
<cfif name EQ "bob">Hi Bob</cfif>
规则3:我认为<cfoutput query="qryData">
有点不对,我已经写了很多,我没有多想。
答案 2 :(得分:1)
仅当您需要评估该变量的内容时,才需要在变量周围使用#符号。例如,当您需要将该变量放在视图中时。
在cfset或cfif中不需要它们,因为变量的内容在Set或比较中使用。
您不应该在cfargument标记中使用变量的值。但是,您可以将变量作为参数传递,而无需先对其进行评估,例如。 myFunction(myarg = myVariable)
Cfprocparam你需要传递值。您可能会混淆传递变量和值的方式。
Value =“myVar”将传递“myVar”作为值,其中value =“#myVar#”将评估myVar并将其内容传递给value。 value = myVar会将myVar传递给value。
您提供的示例中没有真正的不一致。这并不是说ColdFusion中没有一些不一致的地方。 ;)
不要散列一切。它很混乱,意味着你在你编写的所有代码中添加一个评估步骤。