高级cfif声明

Jim*_*mmy 2 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 "")>
Run Code Online (Sandbox Code Playgroud)

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

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

Pet*_*ton 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 "")
    >
Run Code Online (Sandbox Code Playgroud)


而且我更倾向于这样写:

<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)   )
    )>
Run Code Online (Sandbox Code Playgroud)

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


无论如何,假设我在一个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>
...
Run Code Online (Sandbox Code Playgroud)

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

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