高级cfif声明

时间:2010-08-06 16:54:44

标签: coldfusion if-statement

我如何在CF中创建此语句?

<cfif (not isdefined("URL.room") or #URL.room# EQ "")
      and (not isdefined("URL.system" or #URL.system# EQ "")
      and (not isdefined("URL.date") or #URL.date# EQ "")>

显然括号不起作用,但说明了我想要完成的事情。这是什么语法?

修改 好的,我了解如何使用EQ等等。我发布这个有点匆忙。我的问题是关于括号。以这种方式使用它们在语法上是否正确?

6 个答案:

答案 0 :(得分:15)

  

编辑:好的,我了解如何使用EQ   所有这一切。我发布了一下这个   匆忙我的问题是关于   括弧。是语法上的吗?   这样使用它们是正确的吗?

从句法上讲,是的。代码的语法是正确的,不会引发语法错误。

但是,这不一定是最好的方法。至少你应该在那里使用换行符,以使其更具可读性,如下所示:

<cfif (not isdefined("URL.room") or URL.room EQ "")
    and (not isdefined("URL.system" or URL.system EQ "")
    and (not isdefined("URL.date") or URL.date EQ "")
    >


而且我更倾向于这样写:

<cfif NOT
    (  ( isDefined('Url.Room')   AND Len(Url.Room)   )
    OR ( isDefined('Url.System') AND Len(Url.System) )
    OR ( isDefined('Url.Date')   AND Len(Url.Date)   )
    )>

因为它更具可读性,并且更明显的是每一行都检查相同的东西。


无论如何,这是假设我在一个IF语句中这样做。

如果你开始有很多条件需要检查,你可能会考虑做这样的事情:

<cfset FieldList = "Room,System,Date" />
<cfset AllFieldsValid = true />
<cfloop index="Field" list="#FieldList#">
    <cfif NOT ( StructKeyExists(Url,Field) AND Len(Url[Field]) )>
        <cfset AllFieldsValid = false />
        <cfbreak/>
    </cfif>
</cfloop>

<cfif AllFieldsValid>
...

一开始可能看起来令人生畏,但更容易维护 - 你只需要向FieldList添加一个新项目(你可能已经有一个变量用于那个purporse)。

无论如何,希望这一切都有所帮助 - 如果有任何问题,请告诉我。

答案 1 :(得分:4)

我更喜欢......

<cfparam name="URL.room" default="">
<cfparam name="URL.system" default="">
<cfparam name="URL.date" default="">


<cfif len(URL.room) EQ 0 and len(URL.system) EQ 0 and len(URL.date) EQ 0>
   ...
</cfif>

或者如果您对混合非布尔函数和布尔表达式

感到满意
<cfif len(URL.room) and len(URL.system) and len(URL.date)>
   ...
</cfif>

答案 2 :(得分:3)

用eq

替换=

答案 3 :(得分:2)

在CFML中,比较运算符使用字符而不是符号:

==  EQ   
!=  NEQ  
>   GT    
>=  GTE   
<   LT    
<=  LTE   

与布尔运算符类似:

!   NOT
&&  AND
||  OR

您仍然可以在CFScript模式下使用传统符号。

另外值得一提的是,作为Adobe ColdFusion的替代CFML引擎的Railo允许您在基于标记的代码中使用符号,如果没有关闭标记的歧义(例如条件包含在括号中)

答案 4 :(得分:1)

@Henry:

 <cfif len(URL.room) EQ 0 and len(URL.system) EQ 0 and len(URL.date) EQ 0>
    ...
 </cfif>

更短的:

 <CFIF Len(URL.room) AND Len(URL.system) and Len(URL.date)>

Len()优于EQ“”

答案 5 :(得分:0)

你需要考虑一下你的逻辑。

如果未定义房间,则无法检查房间是否为空字符串。

你真正需要的是:    如果(structkeyexist(URL,“room”)和(Len(URL.room)eq 0或URL.room eq'blah'))       做一点事    其他       做别的事

我担心stackoverflow会在我的手机上切断你的示例情况,但希望这能说明你需要做什么。

相关问题