Tomalak の答えは ColdFusion 8 では正しいです。ただし、今年後半にリリース予定の ColdFusion 9 では状況が少し変わりつつあります。(完全を期すために、Tomalakの回答をコピーし、必要に応じて調整します。開始していただきありがとうございます。:))
コンストラクタ名として init という名前を使用する必要がありますか?
CF8:いいえ、初期化関数には好きな名前を付けることができます。「init」は単なる慣習です。また、自動的に呼び出されないため、真のコンストラクターではありません。
CF9:答えはまだ「いいえ」です。そうする必要はありません。これは、cfscript (または CF9 にも導入されるスクリプトのみのコンポーネント) 内でのオブジェクトの作成に適用されます。import
andキーワードが追加され、次のnew
ようにオブジェクトのインスタンスを作成できるようになります。
import model.security.*;
userObj = new User();
これは、フォルダーUser.cfc
内にがあることを前提としています。model/security/
さらに、CF9 は、"init" という名前のメソッドまたはオブジェクトと同じ名前 (この場合は "User") を持つメソッドの存在を探し、これをコンストラクターとして暗黙的に呼び出します。
new
Java/C で見られるように、引数をディレクティブに渡すとコンストラクタに転送されるかどうかはわかりません。私はそうなると思いますが、いずれかの方法を示すプレゼンテーションやコード例はまだ見たことがありません。これを書いているときに思いついたので、自分でテストしていません。;) (別のアイデア: 異なる引数セットを持つ複数のコンストラクターがサポートされるかどうか疑問に思います。私はそれを疑っていますが、それは素晴らしいアイデアです。)
同様の機能が CFML (cfscript とは別のタグベースの言語) に現れる可能性があるという暗示があると思いますが、現時点ではそれについては何も言われていません。
init メソッドを呼び出さずにコンポーネントのインスタンスを作成すると、何が返されますか?
ご想像のとおり、コンポーネント インスタンスが返されます。init() 関数の有無はまったく関係ありません。ColdFusion コンポーネントには静的関数の概念はありません。常に GetObject("component", ...) から完全に構築されたインスタンスを取得します。(手動で作成するのを忘れた/しなかった場合、最初の使用の直前に作成される Java オブジェクトの場合はそうではありません。)
init メソッドのコードを取り出して init メソッドを削除し、コードをコンポーネントの先頭に貼り付けることはできますか? init コンストラクターと同じ効果がありますか?
はい、init() メソッドがパラメータを取らない限り、違いはありません。
ただし、コンポーネント インスタンス ("this") を返す init() というメソッドを使用するのが慣例です。" " 以外は何もしなくてもreturn this;
。厳密には必要ない場合でも、一貫性を保ち、すべてのコンポーネントに 1 つ追加します。