これは、新人に ColdFusion を教える際の最大の障害の 1 つです。
# をいつ使用するかは、せいぜいあいまいです。それらを使用しても問題が発生することはあまりないため、ほとんどの人はそれらを使いすぎることに引き寄せられているようです.
では、基本的なルールは何ですか?
これは、新人に ColdFusion を教える際の最大の障害の 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"/>
編集:
一貫性がないように思われる、ちょっと変わったことの1つは、条件付きループを使用すると、変数名を#記号の有無にかかわらず使用できることです。
<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!" --->
での自動エスケープ文字列補間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 --->
複雑な引数を渡す#
には、CFScript ではなく CFML でのみ符号が必要です。さらに、単純な値、配列、構造体、cfcomponents、cffunctions、Java オブジェクト、com オブジェクトなど、あらゆる種類の値を渡すことができます。
#
これらすべての場合において、記号の間のテキストは変数の名前である必要はありません。実際、それはどのような表現でも可能です。もちろん、文字列補間の場合、式は単純な値に評価される必要がありますが、CFML で引数/属性を渡す場合、式は任意の複雑な値に評価される場合もあります。
この#...#
構文を使用すると、文字列リテラル内に式を埋め込むことができます。残念ながら、ColdFusion では、何が文字列で何が式であるかについてかなり一貫性がありません。Jayson は、# を使用する (または使用しない) 場合の例の良いリストを提供しました。
cfoutputタグについて話しているのではないと仮定して始めましょう。答えは常に、コードの他の場所で、引用符の中にある場合は、実際に値を入力できる場合は#記号を使用する必要があります。使用する...したがって、cfloopタグで'to'属性を設定している場合は、簡単に6と入力できますが、変数を使用する場合は、#記号を使用する必要があります。cfloopタグでクエリパラメータを設定している場合、実際にその属性にクエリを入力する方法はなく、クエリを入力する方法もないため、#記号は必要ありません。
同様に、cfdumpタグでは、静的テキストをダンプできるため、変数の内容をダンプする場合は、#記号を使用する必要があります。この問題は一般的に自己修正ですが、私はあなたの痛みを感じます、あなたの学生はおそらく「常にそれらを使用する」または「決してそれらを使用しない」アプローチがないことに不満を感じています...悲しいことに、これはそうではありません、唯一のこと真です。引用符の内側の1つの方法だけが正しくなります。それで、それがうまくいかない場合は、それを一生懸命に見て、自分自身で考えてください:「その変数に含まれる値を使用する代わりに、その値を入力できますか?」答えが「いいえ」の場合、#記号は必要ありません。それ以外の場合は、#文字fooをオンにします。