在ColdFusion中,将函数设置为变量和在标签中调用函数有什么区别



我编写了以下函数:

<cffunction name="check_session_valid" returntype="boolean">
<cfif NOT StructKeyExists(session,"username") OR (len(session.username) EQ 0)>
<script>location.href = 'logout.cfm'</script>
<cfabort>
</cfif>
<cfset session.myApp_start = now()>  
<cfreturn true>
</cffunction>

在我的.cfm页面中,我可以使用调用该函数

<cfset session_valid = application.lib.check_session_valid()>

#application.lib.check_session_valid()#

有什么区别?最佳实践?

由于您询问了最佳实践,这是一个意见问题,我认为您可以通过让它返回true或false来改进您的函数,这取决于session.username是否存在并且长度大于0。然后你可以这样使用它:

<cfif application.lib.check_session_valid()>
code for this condition
<cfelse>
<cflocation href = "logout.cfm">  
<!--- note that cfabort is not necessary --->
<cfif>

关于您的具体问题,我认为额外的变量session_valid是浪费打字。然而,这只是我的看法。

与你的问题无关,我发现你会将用户引导到一个名为logout.cfm的页面很奇怪。通常,用户会被引导到允许他们登录的页面。

老实说,两者都是有效的,根据您的尝试,两者都将被视为最佳实践。

我的经验法则是,如果我需要多次使用函数调用的结果,我会将其设置为变量

myResult = application.lib.check_session_valid();

如果我只需要使用一次变量,我会按照Dan提到的

if( application.lib.check_session_valid() ){
// Do stuff
}

你展示的例子之间的区别是

<cfset session_valid = application.lib.check_session_valid()>

这将把名为session_valid的变量设置为从对check_session_valid()的调用返回的任何值。

#application.lib.check_session_valid()#

在.cfm页面中,这将简单地呈现从对check_session_valid()的调用返回的值,假设它在<cfoutput>标记内。还有其他地方也会呈现该值,例如<cfsavecontent>内部。

最新更新