假设我想从 cfscript 块中的 CFC 调用静态函数。据我所知,唯一的方法是使用 createObject() 返回对 CFC 对象的引用。
这是好习惯吗?我想我记得读过 cfinvoke 肯定会巧妙地实例化对象,并且不会多次实例化静态 CFC。这甚至是真的吗,如果是这样,在使用 createObject() 时这仍然是真的吗?
假设我想从 cfscript 块中的 CFC 调用静态函数。据我所知,唯一的方法是使用 createObject() 返回对 CFC 对象的引用。
这是好习惯吗?我想我记得读过 cfinvoke 肯定会巧妙地实例化对象,并且不会多次实例化静态 CFC。这甚至是真的吗,如果是这样,在使用 createObject() 时这仍然是真的吗?
CFOBJECT 实例化一个组件并为其创建一个变量。
<cfobject type="component" name="path.to.my.CFC" name="myCFC" />
然后 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。如果我要从中调用多个函数,我总是首先创建对象。