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

In ColdFusion, what is the difference between setting a function to a variable and calling a function in hashtags?

我写了下面的函数:

  <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>.