替代在ColdFusion中返回'nil'值

时间:2013-07-25 20:35:04

标签: coldfusion cfml

我有一个函数,可以通过电子邮件在数据库中查找用户,并返回包含其ID,电子邮件和哈希密码的结构。但由于ColdFusion缺少null / nil / none类型,如果用户不存在,我无法弄清楚要返回的内容。

我的第一个解决方案是返回false,然后只使用if(user == false)查看用户是否存在,但同时使用==is,ColdFusion会尝试转换一个有效的用户结构到一个布尔值,并在它不能时抛出错误。

我的第二个解决方案是仅return;没有值,但我的支票变为if(isDefined("foo"))。在我看来,这看起来很丑陋,并且因为变量名现在也在一个字符串中,所以重构有点棘手......

是否有一种在ColdFusion中返回“无法找到”值的干净方法?

2 个答案:

答案 0 :(得分:1)

自CF9以来,CF有isNull(),例如:

<cffunction name="getUser">
  <cfargument name="userID">
  <cfquery name="qUser">
    SELECT * FROM users where userID = <cfqueryparam value="#userID#">
  </cfquery>
  <cfif qUser.recordCount>
    <cfreturn {name=qUser.name}>
  </cfif>
</cffunction>

<cfset var user = getUser(1)>
<cfif isNull(user)>
   <!-- user not found -->
<cfelse>
   Welcome #user.name#
</cfif>

答案 1 :(得分:1)

返回空白''false可以正常工作。

诀窍在于如何处理回报,因为很可能你会做if isStruct(result),只要它不是结构,你返回的并不重要