コンポーネントの機能を実行するためにはcfinvokeとのCreateObjectを使用しての違いは何ですか?

StackOverflow https://stackoverflow.com/questions/4605746

質問

私の会社のコードでは、私は多くの場合、そのコンポーネントのオブジェクトを初期化し、オブジェクトオフメソッドを呼び出すことによって使用されるコンポーネントのファイルを見てきました。しかし、唯一のコンポーネントファイルから一つの方法を使用する場合は特に、私にはcfinvokeメソッドを使用して幾分簡単なようです。コンポーネント関数を呼び出し、これらの2つの方法の違いは何であり、それぞれの長所/短所は何ですか?私が使うべきときに?

役に立ちましたか?

解決

のcfinvokeはタグのみで使用することができます。

のCreateObjectタグ&CFScriptの両方で使用され、ビットスリム/ IMO読みやすくなる傾向にあることができる。

私はそれが「かさばる」見つかりましたが、それのプロが、CFC内の方法に比べて、あなたがすることができ、動的ループであるため、

は最近まで私は、cfinvokeのを使用して回避しました。 CreateObjectの中で、あなたがすることはできません。

法1、方法2、法3、法4 - 例えば場合だから私は、メソッドを持つCFCを持っています。私はそれらを超えるループがとても好きなことができます: -

<cfloop from="1" to="4" index="element">
   <cfif structKeyExists(this,'getMethod#element#')>
<cfinvoke component="#this#" method="getLine#local.element#" returnVariable="methodValue"></cfinvoke>
<cfset arrayAppend(myArray,methodValue) />
   </cfif>

-

ノートへのもう一つは、いくつかの共有のホストがCreateObjectの上でロックダウンすることです。主にアクセスのそれは下線に与えるためにJavaます。

他のヒント

createObject()を使用してのもう一つの利点は、init()方法、例えばをチェーンことができるということです。

<cfset myObject = createObject("com.path.MyObject").init() />

そして、あなたのinit()戻り、再度オブジェクトを使用する必要はありません場合は、この方法はさらに、チェーンを行くことができますthisの場合:

<cfset functionResults = createObject("com.path.MyObject").init().myFunction() />

これの価値はCF 9で使用すると、オブジェクトを作成するために、新しい(エヘン)new構文を使用することができることを指摘。例は、上記と同じオブジェクトを作成し、それのinit()を呼び出すためには、私は書くことができます:

<cfset myObject = new com.path.MyObject() />
それは、これを行うためのオプションのようなきちんとしてIです。 CFは、このような機能を持つ私の意見では右方向に移動しています。

あなたはほとんどそれを自分で答えました:表面には、一つは、あなたがCFCをインスタンス化し、メソッドの名前1呼び出すcfinvokeの中に一挙(にやって、その後、ページ上の唯一のメソッドを呼び出すことになるならばと言うことができ)意味をなさない。そして、あなたはページ上のCFCの複数のメソッドを呼び出します確かならば、その後のステップを分離するには、感覚(インスタンス化をCreateObject関数またはcfobjectタグでCFC、そのオブジェクトに見られるような方法で呼び出し、CFCへのポインタ)を行いますので、あなたが複数回そのインスタンス化のコストを払っていないこと。

しかし、それはページへの後続の要求に再利用できるように、ページが頻繁に呼び出された場合、それはCFCのインスタンス化の結果を保存することも意味をなすことを覚えておくん。サーバー、アプリケーション、またはセッションかどうかは、そのような再利用の恩恵を受ける「誰」に基づいて:あなたはいないローカル変数ではなく、共有範囲内で(のcfobject / CreateObjectの結果)を格納することであることをするでしょう。もちろん、それはあなたがプログラム的に処理するために、その後現職だ/この「キャッシュされた」CFCのインスタンスを保存するためにどのくらい決めます。

あなたはCFCインスタンスこうして保存、あなたは基本的にあなたがCFCで作成したローカル変数VARにまだより注意する必要があるということです「VARスコープバグ」、の影響を受けやすくなったときに、重要として。

:むしろその上でより詳しく説明しようとするよりも、私はその上に作成したメタ・リソースを指摘します

http://www.carehart.org/ブログ/クライアント/ index.cfmに/ 2010/3月4日/ resources_on_the_var_scope_problemする

希望に役立ちます。

私はGoogleの方にあなたをポイントします。むしろ、この議論を焼き直します:

http://www.google.com/search?q=cfinvoke+ VS +のCreateObject

いくつかの微妙な違いがあります(IE:<cfinvoke>は、動的メソッド名を処理することが可能である)が、基本的に、それはただの個人的な好みに沸きます。まあ、あなたが<cfinvoke>via <cfscript>を使用することができないという事実ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top