在coldfusion中访问自定义函数的最佳方式是什么
我想知道是否有人想到了在coldfusion中存储和访问自定义函数的最佳方法 我目前正在做的事情:目前我有多种CF组件,其中存储了相关功能。例如:在coldfusion中访问自定义函数的最佳方式是什么,coldfusion,Coldfusion,我想知道是否有人想到了在coldfusion中存储和访问自定义函数的最佳方法 我目前正在做的事情:目前我有多种CF组件,其中存储了相关功能。例如: <cfcomponent displayname="Math"> <cffunction name="func1"> <!---Code---> </cffunction> <!---Function 2, Func
<cfcomponent displayname="Math">
<cffunction name="func1">
<!---Code--->
</cffunction>
<!---Function 2, Function 3, etc.---->
</cfcomponent>
然后,当我需要在页面上使用它们时,我会执行以下操作
<cfset lv_math_obj = createobject("component","cfc.Math")>
<cfset variable = lv_math_obj.myFunction(parameter)>
我喜欢它的原因:上面的代码很容易阅读和理解,而且我的函数是预编译的
我不喜欢它的原因:对象不应该是相互独立工作的函数列表
有没有人想到一种更好的方法来存储和访问自定义函数?您目前所做的事情本身并没有错,但是对于每个请求,您都在实例化cfc.Math,这在CF9+中应该不会让人汗流浃背,但不是必需的 您可以通过在ApplicationStart()中实例化一次来优化它,并将对象放入
应用程序
范围。但是,这样做会使调用UDF变得相当冗长,即Application.math.func1()
。您可以在onRequest()
中设置Variables.math=Application.math
,然后所有CFM都可以访问math.anyFunc()
。为了使您的UDFS可以访问任何CFC方法,您可以考虑将UDF放在<代码>窗体< /代码>或<代码> URL< /Cord>范围中,以避免使用范围前缀。
此外,当更新您的cfc.Math
时,您需要像大多数框架那样清除旧副本(例如?init=true
,在onRequestStart()
中检测,并执行重新初始化),或重新启动应用程序
在我看来,最简单的方法是将UDF放入
math.cfm
中,并在我需要使用它们之前将其包含进去。您当前所做的本身并没有错,但对于每个请求,您都在实例化cfc.math
,这应该不会让CF9+汗流浃背,但不是必需的
您可以通过在ApplicationStart()中实例化一次来优化它,并将对象放入应用程序
范围。但是,这样做会使调用UDF变得相当冗长,即Application.math.func1()
。您可以在onRequest()
中设置Variables.math=Application.math
,然后所有CFM都可以访问math.anyFunc()
。为了使您的UDFS可以访问任何CFC方法,您可以考虑将UDF放在<代码>窗体< /代码>或<代码> URL< /Cord>范围中,以避免使用范围前缀。
此外,当更新您的cfc.Math
时,您需要像大多数框架那样清除旧副本(例如?init=true
,在onRequestStart()
中检测,并执行重新初始化),或重新启动应用程序
在我看来,最简单的方法是将UDF放入
math.cfm
中,并在我需要使用它们之前将其包括在内。您可以将常用函数放在请求范围中
<cffunction name="OnRequestStart" access="public" returntype="boolean" output="false">
<cfargument name="TargetPage" type="string" required="true"/>
<cfinclude template="/udfs/global.cfm">
<cfreturn true />
</cffunction>
我觉得这很容易处理。也可以将组件或功能放在应用程序范围内,但正如Henry指出的,当您开发或更改网站时,这可能会非常烦人
如果将函数放在请求范围中,则需要引用该函数。例如,包含的/udfs/global.cfm文件可能包含以下函数:
<cffunction name="func1">
<!---Code--->
</cffunction>
<cfset request.func1 = func1>
在应用程序中,可以使用以下语句调用此函数:
<cfset test = request.func1()>
您可以将常用函数放在请求范围中
<cffunction name="OnRequestStart" access="public" returntype="boolean" output="false">
<cfargument name="TargetPage" type="string" required="true"/>
<cfinclude template="/udfs/global.cfm">
<cfreturn true />
</cffunction>
我觉得这很容易处理。也可以将组件或功能放在应用程序范围内,但正如Henry指出的,当您开发或更改网站时,这可能会非常烦人
如果将函数放在请求范围中,则需要引用该函数。例如,包含的/udfs/global.cfm文件可能包含以下函数:
<cffunction name="func1">
<!---Code--->
</cffunction>
<cfset request.func1 = func1>
在应用程序中,可以使用以下语句调用此函数:
<cfset test = request.func1()>
还有一个。你是否抱怨你有一大堆的,没有一个读过或修改过?还是说函数确实是独立的,而您只是在寻找独立函数库的OO模式?函数是预编译的?嗯,它们都是预编译的,即使您在.cfm afaik中定义了一个内联。我已经看到它以多种方式完成了—如您所描述的CFC,.cfm包括utilities.cfm或udf.cfm,以及.cfm本身。我更喜欢将它们放在一个单独的文件中,以便重用,但我不确定一种方法是否比另一种方法“更好”。CFC并不一定意味着“对象”。使用CFC作为函数库是完全可以接受的。我经常有一个具有相关功能的CFC,例如Formatter.CFC,用于在应用程序中一致地格式化日期、时间等。此外,您所指的是用户定义函数(UDF),而不是“自定义函数”:还有。你是否抱怨你有一大堆的,没有一个读过或修改过?还是说函数确实是独立的,而您只是在寻找独立函数库的OO模式?函数是预编译的?嗯,它们都是预编译的,即使您在.cfm afaik中定义了一个内联。我已经看到它以多种方式完成了—如您所描述的CFC,.cfm包括utilities.cfm或udf.cfm,以及.cfm本身。我更喜欢将它们放在一个单独的文件中,以便重用,但我不确定一种方法是否比另一种方法“更好”。CFC并不一定意味着“对象”。使用CFC作为函数库是完全可以接受的。我经常