変数

変数は最もよく使用されているオペランドです。変数値は設定およびリセットができ、または属性として CFML タグや JRun サーブレットに渡すこともできます。また、パラメータとして関数に渡すこともでき、ほとんどの定数をそれで置き換えることができます。

ColdFusion と関連付けられている変数のリストについては、『CFML クイックリファレンス』を参照してください。

変数命名規則

ColdFusion 変数およびフォーム フィールドに名前を付けるときは、次のガイドラインに注意してください。

ColdFusion 変数タイプ

次の表は、ColdFusion のアプリケーション ページで使用できる変数のタイプを示します
変数のタイプ
説明
クエリ結果
データベース クエリの結果は、ダイナミック パラメータとして使用できます。 たとえば、指定ユーザ名に対する ID を検索する "LookupUser" という名前のクエリを作成すると、この ID を別のクエリまたは cfoutput への呼び出しで使用することができます。
ローカル変数
cfset タグおよび cfparam タグで作成された任意のタイプの変数の既定スコープ。 たとえば、<cfset A = 5>は変数 A を 5 に設定します。この変数は、変数が作成されたアプリケーション ページおよび取り込まれたページでのみ使用可能です。
URL パラメータ
variablename = value 形式でアプリケーション ページ名の URL の後に追加されたパラメータ。 URL パラメータは連想配列内に格納されます。 詳細は、"連想配列に格納される変数"を参照してください。
フォーム フィールド
パラメータをページに渡す最も一般的な方法。 ユーザがフォーム フィールドにデータを入力するとき、フォーム フィールド名を持つパラメータは、アクション ページに渡されます。 フォーム フィールドは連想配列内に格納されます。 詳細は、"連想配列に格納される変数"を参照してください。
クライアント
特定のクライアントに関連付けられている変数。 この変数は、アプリケーション内でユーザがページを移動してもステートを維持します。 既定ではこの変数はシステム レジストリに格納されていますが、Cookie またはデータベース内に格納することもできます。
クライアント変数は ColdFusion Web Application Framework の一部です。 詳細は、『ColdFusion アプリケーション開発ガイド』を参照してください。
サーバ
現在の Web サーバに関連付けられている変数。 ColdFusion サーバをシャットダウンするまで ColdFusion のすべてのアプリケーションで使用できます。 このサーバ スコープでは、ColdFusion アプリケーション ページのすべてが参照できる変数を定義することができます。
サーバ変数は連想配列内に格納されます。 詳細は、"連想配列に格納される変数"を参照してください。
サーバ変数のロックの詳細は、cflockの説明を参照してください。
セッション
クライアント ID がセッションを維持する限り保持される、個々のクライアントに関連付けられる変数。 現在のクライアント変数のように、セッション変数にはクライアント名が必要で、その 1 つのクライアント ID のみでセッション変数は使用可能です。
クライアント変数とは異なり、セッション変数はサーバのメモリに格納され、非アクティブである状態が一定時間続いた後で、タイムアウトするように設定できます。
セッション変数は連想配列内に格納されます。 詳細は、"連想配列に格納される変数"を参照してください。
セッション変数は、アクセス中はロックされる必要があります。 詳細は、cflockの説明を参照してください。
セッション変数は ColdFusion Web Application Framework の一部です。 つまりこの変数は、Application.cfm ページのコンテキストで使用されます。 詳細は、『ColdFusion アプリケーション開発ガイド』およびcfapplicationの説明を参照してください。
アプリケーション
CFAPPLICATION NAME 属性で定義されるように、アプリケーションに関連付けられる変数です。通常は、Application.cfm ファイルで使用されます。 アプリケーション変数は、アプリケーション名が定義されている場合のみ動作します。
アプリケーション変数は連想配列内に格納されます。 詳細は、"連想配列に格納される変数"を参照してください。
アプリケーション変数は、アクセス中はロックされる必要があります。 詳細は、cflockの説明を参照してください。
アプリケーション変数は ColdFusion Web Application Framework の一部です。 つまりこの変数は、Application.cfm ページのコンテキストで使用されます。 詳細は、『ColdFusion アプリケーション開発ガイド』およびcfapplicationの説明を参照してください。
リクエスト
1 つのページのリクエスト処理に関係するデータを格納する変数。
リクエスト変数は、連想配列内にデータを格納するために便利で、カスタム タグのようなネストされたタグ間で運ばれ、1 度に処理されます。
リクエスト変数は連想配列内に格納されます。 詳細は、"連想配列に格納される変数"を参照してください。
呼び出し
ColdFusion カスタム タグの呼び出しテンプレートからの変数の呼び出し、および使用を可能にする変数
HTTP Cookie
ブラウザに格納されている変数。 ブラウザがページリクエストをするたびに使用可能です。 cfcookie タグで Cookie 変数を作成することができます。
ファイル
読み取り専用の変数。 cffile action = "upload"処理を実行するときに作成されます。
CGI 環境
各ページリクエストには、そのリクエストに対して送信された環境変数がいくつかあり、それらの変数はリクエストされたときのコンテキストに関連しています。 使用可能な変数は、ブラウザおよびサーバ ソフトウェアにより異なります。 一般に使用されている CGI 変数のリストについては、"CGI 環境変数"を参照してください。
メモ CGI 環境変数は、サーバ API をサポートする Web サーバを使用しているときでも作成されます。

変数の参照の認識またはスコープ

ColdFusion では、各ソースに異なる接頭辞を使用することにより、異なるソースからの同一名パラメータを区別します。変数のソースを指定することは、変数を「スコープする」として知られています。たとえば、フォームの送信で渡される "State" と呼ばれる変数を指定するには、その変数を "Form.State" として参照します。URL で渡される "State" と呼ばれる変数を指定するには、その変数を "URL.State" として参照します。

異なるスコープの 2 つの変数に同じ名前が付けられていないのであれば、スコープ接頭辞を使用する必要はありませんが、接頭辞を使用すると読みやすくなり、処理速度も改善されるので、使用することをお勧めします。たとえば、単純に "lastname" と呼ぶよりも、Form.lastname 変数と名前を付けるほうが明確です。


ヒント

変数のスコープ接頭辞をアプリケーション、セッション、サーバ、およびリクエスト のすべての変数に指定してください。


cferror および cfftp など、CFML タグの多くには、それらに関連付けられる変数があります。通常、これらの変数では、接頭辞としてタグ名が使用されます。変数のリストについては、『CFML クイックリファレンス』を参照してください。


メモ

cfset を使用して作成できる変数は、cfscript の代入文でも作成できます。


スコープと変数

次の表は、変数スコープのタイプおよびコード内でのそれらの参照方法を示します。これらのスコープに加えて、タグまたは処理の結果に関する情報を提供する ColdFusion データ連想配列がいくつかあります。特別な変数については、『CFML クイックリファレンス』およびこれらの変数を返す個々の CFML タグのマニュアルを参照してください。
接頭辞
必須
可用性
コメント
Variables
(Local)
No
変数を作成するフォーム ページとは異なるページまたはアクション ページにより呼び出されるカスタム タグでのアクセスはできません。
Variables 接頭辞を使い、または接頭辞を使わないで、cfset または cfparam タグにより作成されます。
Form
No
フォームのアクション ページで使用されます。アクション ページと異なる場合は、使用できません。
form または cfform タグの name 属性により作成されます。フォームが送信されるとき、フォームの本文にデータ タグの値 (input など) が含まれます。
URL
No
URL の対象ページ
ページにアクセスする URL クエリ文字列で渡されるパラメータが含まれます。
Attributes
Yes
カスタム タグ ページのみで使用できます。
カスタム タグ ページへの呼び出しページによりカスタム タグの属性で渡される値が含まれます。
Caller
呼び出しページではオプションです。
カスタム タグ ページでは必須です。
カスタム タグを呼び出すページの通常のローカル変数として使用できます。Caller スコープ接頭辞を使用することにより、カスタム タグ ページで使用できます。
Caller 接頭辞を使用することにより、カスタム タグ ページ "cfset" または cfparam タグで作成されます。呼び出しタグ ページではローカル変数として作成されます。
Request
Yes
作成ページおよび、変数が作成された後で呼び出される、ネストされたタグを含む任意のタグで使用できます。
Request 接頭辞を使い、cfset または cfparam タグにより作成されます。
CGI
No
任意のページで使用できます。値は最新のブラウザリクエストに特有です。
Web ブラウザにより作成されます。ブラウザリクエストから生成されるサーバ環境変数が含まれます。
Cookie
No
1 つまたは複数のアプリケーションおよびページの、複数のブラウザ セッションに対して、1 つのクライアントで使用できます。
cfcookie タグにより作成されます。
Client
No
1 つのアプリケーションの、複数のブラウザ セッションに対して、1 つのクライアントで使用できます。
Client 接頭辞を使い、cfset または cfparam タグにより作成されます。
Session
Yes
1 つのアプリケーションの、1 つのブラウザ セッションに対して、1 つのクライアントで使用できます。
Session 接頭辞を使い、cfset または cfparam タグにより作成されます。
Application
Yes
1 つのアプリケーションの、複数のブラウザ セッションに対して、複数のクライアントで使用できます。
Application 接頭辞を使い、cfset または cfparam タグにより作成されます。
Server
Yes
ColdFusion サーバの任意のページで使用できます。
Server 接頭辞を使い、cfset または cfparam タグにより作成されます。

パフォーマンスとスコープ

適切なスコープで変数を認識することにより、パフォーマンスを改善することができます。変数スコープを追加すると処理速度が改善されますが、その代わりにコードの再利用が難しくなる可能性があります。

次の例では、fullname 変数の両方の形式が許可されています。しかし、スコープ接頭辞を含む例の方が、スコープを持たない例よりも速く評価されます。

<cfoutput>
  #Client.fullname#
  #fullname#
</cfoutput>

変数にスコープ接頭辞がない場合、ColdFusion では変数が次の順序で検索されます。

  1. cfset および cfquery を使用して作成されたローカル変数
  2. CGI 変数
  3. ファイル変数
  4. URL 変数
  5. フォーム変数
  6. Cookie 変数
  7. クライアント変数

メモ

ColdFusion ではアプリケーション、セッション、サーバ、リクエスト、または CFML タグの変数 (ファイル変数は除く) の検索は自動的に行われません。これらの変数に 対しては接頭辞を使用する必要があります。


次のスコープは ColdFusion 連想配列として公開されています。


メモ

アプリケーション ページの変数は、cfinclude タグ付属の他のアプリケーション ペー ジでも使用できます。取り込まれたページの変数はまた、取り込みをするページによ りアクセスすることもできます。


アプリケーション ページ間の変数

多くの ColdFusion 変数は、単一アプリケーション ページのみに適用されます。しかし、あるタイプの変数の中には、複数アプリケーション ページ間で使用できるものもあります。


メモ

変数が複数のアプリケーション ページで使用される場合、その変数名を間違えないよ うに、ご注意ください。詳細は、"変数命名規則"を参照してください。


cfapplication タグの clientManagement 属性を使用したクライアント ステート管理の設定については、cfapplicationの説明を参照してください。アプリケーション、クライアント、およびセッションの変数の使用については、 『ColdFusion アプリケーション開発ガイド』を参照してください。

連想配列に格納される変数

ColdFusion 5 において、フォーム、アプリケーション、セッション、サーバ、リクエスト、および URL 変数は連想配列に格納されます。このように、フォームから取得されたフィールドすべてを 1 つの連想配列として、また URL で渡されるパラメータすべてを 1 つの連想配列として参照することができます。

連想配列には、structname.key 形式で 任意の ColdFusion 連想配列関数を使用してアクセスすることができます。ここで、各キーはフォームのフィールド名または指定タイプの変数名を示します。ColdFusion では、これらの変数が使用されると常に連想配列が作成されるので、WDDX への変換は非常に簡単です。

たとえば、次のとおりです。

<cfif isDefined("form.submit")>
  <cfwddx action = "CFML2WDDX" input = "#form#" output = "formscope">
  <cfoutput>#formScope#</cfoutput>
</cfif>

<cfoutput>
<form method = "post" action = "myForm.cfm">
  <input type = "Text" name = "Title"><br>
  <input type = "Text" name = "URL"><br>
  <textarea name = "teaser" rows = "3" cols = "40"></textarea>
  <br>
  <input type = "Submit" name = "submit" value = "Submit">
</form>
</cfoutput>

メモ

セッション変数やアプリケーション変数をクリアするためにStructClear を使用しな いでください。StructClear を使用することによって SessionID、CFID、CFTOKEN、 およびアプリケーション変数が失われる可能性があるからです。これらの変数が失わ れないようにするには、セッション データを session.foo.* に格納して、session.foo をクリアします。それから、アプリケーション データを application.foo.* に格納し て、application.foo をクリアします。