3

假设我想从 cfscript 块中的 CFC 调用静态函数。据我所知,唯一的方法是使用 createObject() 返回对 CFC 对象的引用。

这是好习惯吗?我想我记得读过 cfinvoke 肯定会巧妙地实例化对象,并且不会多次实例化静态 CFC。这甚至是真的吗,如果是这样,在使用 createObject() 时这仍然是真的吗?

4

1 回答 1

10

对象

CFOBJECT 实例化一个组件并为其创建一个变量。

<cfobject type="component" name="path.to.my.CFC" name="myCFC" />

CFINVOKE

然后 CFINVOKE 可以引用由 CFOBJECT 创建的变量,因此它不必再次重新创建对象。

<cfinvoke component="#myCFC#" method="foo" returnVariable="myValue" />

因此,您可以在#myCFC#不重新创建对象的情况下调用任意数量的 CFINVOKE。

但是,如果您不使用 CFOBJECT,CFINVOKE 也可以为您隐式创建对象。

<cfinvoke component="path.to.my.CFC" method="foo" returnVariable="myValue" />

以这种方式调用多个函数每次都会重新创建对象。

创建对象

createObject()工作方式几乎相同。首先使用引用变量创建对象

<cfscript>
myCFC = createObject("component", "path.to.my.CFC");
myValue = myCFC.foo();
otherValue = myCFC.bar();
</cfscript>

或使用每个函数调用创建对象。

<cfscript>
myValue = createObject("component", "path.to.my.CFC").foo();
otherValue = createObject("component", "path.to.my.CFC").bar();
</cfscript>

我更喜欢createObject(),因为我一直在尽可能多地使用 CFSCRIPT。如果我要从中调用多个函数,我总是首先创建对象。

于 2014-02-27T17:50:03.733 回答