这一直是教新手ColdFusion的最大障碍之一。
何时使用 # 最好不要模棱两可。由于使用它们通常不会引起问题,因此大多数人似乎倾向于过度使用它们。
那么,基本规则是什么?
这一直是教新手ColdFusion的最大障碍之一。
何时使用 # 最好不要模棱两可。由于使用它们通常不会引起问题,因此大多数人似乎倾向于过度使用它们。
那么,基本规则是什么?
我认为更容易说明在哪里不能使用 # 号。唯一的地方是在 cfif 语句和 cfset 语句中,如果您不使用变量来构建带引号的字符串。在几乎所有其他情况下,您都需要使用 # 符号。
以下是一个不会使用它的示例:
<cfset value1 = 5>
<cfset value2 = value1/>
<cfif value1 EQ value2>
Yay!!!
</cfif>
<cfset value2 = "Four plus one is " & value1/>
你将在以下情况下使用#的例子:
in a cfset where the variable is surrounded by quotes
<cfset value1 = 5>
<cfset value2 = "Four plus one is #value1#"/>
the bodies of cfoutput, cfmail, and cffunction (output="yes") tags
<cfoutput>#value2#</cfoutput>
<cfmail to="e@example.com" from="e@example.com" subject="x">#value2#</cfmail>
<cffunction name="func" output="yes">#value2#</cffunction>
in an attribute value of any coldfusion tag
<cfset dsn = "myDB"/>
<cfquery name="qryUsers" datasource="#dsn#">
<cfset value1 = 5>
<cfset value2 = 10/>
<cfloop from="#value1#" to="#value2#" index="i">
<cfqueryparam value="#value1#" cfsqltype="cf_sql_integer"/>
编辑:
我刚刚注意到一个奇怪的小事情,似乎不一致的是条件循环允许使用有或没有#号的变量名。
<cfset value1 = 5>
<cfloop condition = "value1 LTE 10">
<cfoutput>#value1#</cfoutput><br>
<cfset value1 += 1>
</cfloop>
<cfset value1 = 5>
<cfloop condition = "#value1# LTE 10">
<cfoutput>#value1#</cfoutput><br>
<cfset value1 += 1>
</cfloop>
字符串插值:
<cfset name = "Danny" />
<cfset greeting = "Hello, #name#!" />
<!--- greeting is set to: "Hello, Danny!" --->
< p >在cfquery
中自动转义的字符串插值:
<cfset username = "dannyo'doule" ?>
<cfquery ...>
select u.[ID]
from [User] u
where u.[Username] = '#username#'
</cfquery>
<!--- the query is sent to the server (auto-escaped) as: --->
<!--- select u.[ID] from [User] u where u.[Username] = 'dannyo''doule' --->
<!--- note that the single-quote in the username has been escaped --->
<!--- by cfquery before being sent to the database server --->
在CFML中传递复杂的参数/属性:
<cfset p = StructNew() />
<cfset p.firstName = "Danny" />
<cfset p.lastName = "Robinson" />
<cfmodule template="modules/view/person.cfm" person="#p#">
<!--- the variable Attributes.person will be --->
<!--- available in modules/view/person.cfm --->
#...#
语法允许将表达式嵌入字符串文字中。不幸的是,ColdFusion对于什么是字符串和什么是表达式并不一致。Jayson提供了一个很好的例子,告诉你何时使用(或不使用)#。
首先,假设您不是在谈论cfoutput标记,因为那么答案总是在代码的其他地方。如果您在引号内部,则需要使用#符号(如果可能)来键入要使用的值...所以,如果您在cfloop标记中设置“to”属性,则可以轻松键入6,但如果要使用变量,则需要使用#符号。现在,如果您在cfloop标记中设置查询参数,则无法实际键入查询到该属性中,无法键入查询,因此不需要使用#符号。
同样地,在cfdump标记中,您可以转储静态文本,因此如果要转储变量的内容,则需要使用#符号。这个问题通常是自我纠正的,但我感到您的痛苦,您的学生可能会感到沮丧,因为没有“始终使用它们”或“永远不使用它们”的方法...可悲的是这不是情况,唯一正确的事情是引号内只有一种方式。所以,如果它不起作用,请仔细思考并长时间查看它,并想:“我能否键入该值而不是使用该变量中包含的值?”如果答案是否定的,则不需要使用#符号,否则请使用#字符foo。