3

我正在尝试确定是否定义了具有变量名的变量。请帮助我的语法......到目前为止我的尝试:

<cfif isDefined(Evaluate("session['#url.sessionSQL#']['SQL_ALL']"))>

<cfif isDefined('Evaluate("session[#url.sessionSQL#]")["SQL_ALL"]')>

<cfif isDefined(Evaluate("session['#url.sessionSQL#']['SQL_ALL']"))>        

<cfif isDefined('session[Evaluate("#url.sessionSQL#")]["SQL_ALL"]')>

<cfif isDefined('session["#url.sessionSQL#"]["SQL_ALL"]')>

谢谢。

4

4 回答 4

6

你的问题有点令人困惑;)

如果 session[url.sessionSQL]['SQL_ALL'] 包含变量的名称,您可以使用 structKeyExists 来验证变量是否存在于特定范围内。

<cfif structKeyExists(scopeToCheck, "TestForThisVariableName")>  
... ie
<cfif structKeyExists(variables, session[url.sessionSQL].SQL_ALL)>

另一方面,如果只是想验证那些会话变量是否存在

  <cfif structKeyExists(session, url.sessionSQL) AND 
        structKeyExists(session[url.sessionSQL], "SQL_ALL")>

无论哪种方式,您都不需要 evaluate() 函数。

更新:IsDefined从评论来看,和之间的一个关键区别StructKeyExists精度。IsDefined在确定变量是否存在时会检查整个范围列表。通常(尽管并非总是如此)这是不可取的,因为如果您忘记在多个范围中存在特定变量,它可能会导致意外结果。(IsDefined在函数内部使用就是一个很好的例子。)当您特别想检查多个范围时,那么IsDefined()更合适。否则,我会坚持下去,StructKeyExists因为它的结果不那么模棱两可。

于 2011-10-21T17:57:58.273 回答
0
<cfif isDefined("#session[url.sessionSQL].SQL_ALL#")>

更新

假设您要检查的变量的session[url.sessionSQL].SQL_ALL名称url存储sessionSQL_ALL

然后是最安全的版本:

<cfif isDefined("url.sessionSQL") 
      and isDefined("session[url.sessionSQL]")
      and isDefined("session[url.sessionSQL].SQL_ALL")
      and isDefined("#session[url.sessionSQL].SQL_ALL#")>
于 2011-10-21T17:40:27.027 回答
0

尽管 Henry 下面的答案是最好的,但我会指出上面语法的问题。

您希望将 isDefined() 内部的字符串评估为字符串,但它是用引号引起来的(这当然是 isDefined() 所必需的,因为它需要一个变量的名称,而不是一个实际的变量。所以你需要哈希标记来制作evaluate() 在引号内运行。

<cfif isDefined('#Evaluate("session[url.sessionSQL]")#["SQL_ALL"]')>

否则它会寻找一个名为“session[#url.sessionSQL#]”)["SQL_ALL"]" 的变量

我实际上并没有对此进行测试,但我相信这应该可行。但显然,另一种方式要好得多。

于 2011-10-21T17:57:47.377 回答
0

编辑:

事实证明,Leigh 的上述答案很好,但不是 Henry 的。在此期间,我找到了自己的解决方案,如下所示。

在最初的问题中,我有一个结构

"#session#"

其中有一个变量引用的元素

"#url.sessionSQL#"

换句话说,

"#session[sessionSQL]#" 

我试图找出该元素是否定义了一个名为“SQL_ALL”的structKey。我能够让事情像这样工作:

<cfset sessionSQL = #session[url.sessionSQL]# />
<cfif structKeyExists(sessionSQL, "SQL_ALL")>
于 2011-10-24T17:43:16.607 回答