我有一个函数,可以通过电子邮件在数据库中查找用户,并返回包含其ID,电子邮件和哈希密码的结构。但由于ColdFusion缺少null / nil / none类型,如果用户不存在,我无法弄清楚要返回的内容。
我的第一个解决方案是返回false
,然后只使用if(user == false)
查看用户是否存在,但同时使用==
和is
,ColdFusion会尝试转换一个有效的用户结构到一个布尔值,并在它不能时抛出错误。
我的第二个解决方案是仅return;
没有值,但我的支票变为if(isDefined("foo"))
。在我看来,这看起来很丑陋,并且因为变量名现在也在一个字符串中,所以重构有点棘手......
是否有一种在ColdFusion中返回“无法找到”值的干净方法?
答案 0 :(得分:1)
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)
,只要它不是结构,你返回的并不重要