在我公司的代码,我经常看到通过初始化该组件的对象,并调用关闭对象的方法中使用组件文件。然而,在我看来,有些更直接使用CFINVOKE方法,特别是利用只从部件文件中的一个方法时。什么是调用组件的功能这2种方法之间的差异,各有什么利弊/利弊?什么时候应该使用哪个?

有帮助吗?

解决方案

CFINVOKE只能在标签中使用。

的CreateObject可以在两个标记&CFSCRIPT使用,并且往往是一个位更薄/更容易阅读IMO

直到最近我避免使用CFINVOKE因为我发现它“笨重”,但一亲它是可以动态循环在CFC中的方法。在CREATEOBJECT你不能。

因此,如果例如我已经得到具有方法的CFC - 方法1,方法2,方法3,方法4。我可以遍历它们像这样: -

<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。主要是因为访问它给下划线爪哇。

其他提示

使用createObject()的一个其它的好处是,可以链init()方法,e.g。

<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() />

这是整洁,我喜欢做这样的选择。 CF在朝着正确的方向在我看来,像这样的功能。

您已经几乎回答了你自己:表面上,有人可能会说,如果你将调用页面上只有一个方法,然后在一个在做CFINVOKE(其中实例化的CFC和调用一个命名的方法一举) 说得通。当然,如果你调用CFC的不止一个方法的页面上,然后分离步骤才有意义(实例化CreateObject函数或cfobject标签的CFC,然后调用在该对象中找到方法,一个指向CFC) ,让您不支付该费用实例不止一次。

但千万记住,如果页面被调用的时候,它可能是有意义也节省实例化CFC的这一结果,以便它可以在随后的请求的页面被重用。你会做,通过将其存储(cfobject / CREATEOBJECT的结果)不是在一个局部变量,但不是共享范围:无论是服务器,应用程序或会话的基础上,“谁”会从这样的重用受益。当然,这则有义务在你的编程方式处理/决定如何长时间保存这个“缓存” CFC实例。

同样重要的是,当您保存CFC实例这样,你就成为了“VAR范围虫”,这基本上是你需要更加小心VAR您在CFC创建任何局部变量更敏感。而不是试图更多地讨论,我会指出,上创建一个元资源我:

http://www.carehart.org/博客/客户端/ index.cfm / 2010/3/4 / resources_on_the_var_scope_problem

希望有所帮助。

相反则老调重弹这个讨论我就为您指出谷歌:

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

有一些细微的差别(IE:<cfinvoke>能够处理动态方法名),但本质上,它只是归结为个人喜好。好了,而事实上,你不能使用<cfinvoke>via <cfscript>

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top