什么时候应该使用#ColdFusion的?(When should I use # in ColdF

2019-09-17 09:37发布

这一直是在教学新人们的ColdFusion的最大障碍之一。

当使用#是模糊的最好的。 由于使用这些不经常造成问题似乎大多数人被吸引到使用他们太多。

那么,什么是基本的规则是什么?

Answer 1:

我认为这可能是更容易说哪里都不使用#。 唯一的地方是在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>


Answer 2:

下面是Adobe公司说些什么:

使用数字符号



Answer 3:

字符串插值:

<cfset name = "Danny" />
<cfset greeting = "Hello, #name#!" />
<!--- greeting is set to: "Hello, Danny!" --->

自动转义字符串插值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 --->

传递复杂的参数要求#只有在CFML,不CFSCRIPT SIGNES。 此外,你可以通过任何类型的值:简单的值,数组,结构,cfcomponents,cffunctions,java对象,COM对象等。

在所有这些情况下,之间的文本#迹象并不一定是一个变量的名称 。 事实上,它可以通过任何表达。 当然,对于串内插,则表达式必须计算一个简单的值,但对于参数/属性传递CFML,表达可以评估任何复数值为好。



Answer 4:

#...#语法允许一个字符串中嵌入的表达式。 ColdFusion的是什么是一个字符串,什么是表达遗憾的是相当不一致。 杰森提供了一个良好的名单范例何时使用(或不使用)#秒。



Answer 5:

虽然听起来是一个明智的,人的风险,经验法则是: 使用#围绕变量或这样做,只有当这样不会产生正确的结果表达式 。 或者:如果你不需要他们,不使用它们。

我喜欢杰森的回答虽然。



Answer 6:

让我们假设你是不是在谈论CFOUTPUT标签开始,因为那样的回答总是,其他地方在你的代码,如果你是引号里面,那么就需要使用#符号,如果有可能实际键入要值使用......所以,如果你是在一个CFLOOP标签设置“to”属性,你可以很容易地键入6,但如果你想使用一个变量,你需要使用#符号。 现在,如果你是在一个CFLOOP标签设置的查询参数,也没有办法,你实际上可以输入查询到该属性,没有办法输入查询,因此不需要#符号。

同样,在一个cfdump标签,你可以转储静态文本,所以如果你想转储变量的内容,那么你就需要使用#符号。 这个问题通常是自我纠正的,但我觉得你的痛苦,你的学生可能感到失望,没有“始终使用他们”或“不使用它们”的方法。不幸的是,这是不是这种情况,唯一的事情,是真实的,是内部引号的一种方式将是正确的。 所以,如果不是在工作的样子很难与长和认为自己:“难道我键入值了,而不是使用包含在该变量的值吗?” 如果答案是否定的,那么将不再需要在#符号,否则让你的#字符FOO。



文章来源: When should I use # in ColdFusion?