Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ColdFusion中,变量的解析顺序是什么?_Coldfusion_Variables_Scope - Fatal编程技术网

在ColdFusion中,变量的解析顺序是什么?

在ColdFusion中,变量的解析顺序是什么?,coldfusion,variables,scope,Coldfusion,Variables,Scope,我对变量解析顺序没有什么印象,但在CFML参考或ColdFusion开发指南中找不到它。有人能帮忙吗?通常公认的最佳做法是始终确定变量的范围,原因有两个: 性能-CF不需要通过依次搜索作用域来查找变量 准确性-如果两个变量在不同的作用域中具有相同的名称,则可能无法获得预期的名称 也就是说,以下是搜索变量范围的顺序: 函数本地(VAR关键字) 线程本地(CFTHREAD) 查询结果 函数参数 局部变量 CGI变量 文件变量 URL参数 表单字段 COOKIE值 客户变量 编辑:它还告诉我们哪些

我对变量解析顺序没有什么印象,但在CFML参考或ColdFusion开发指南中找不到它。有人能帮忙吗?

通常公认的最佳做法是始终确定变量的范围,原因有两个:

  • 性能-CF不需要通过依次搜索作用域来查找变量
  • 准确性-如果两个变量在不同的作用域中具有相同的名称,则可能无法获得预期的名称
也就是说,以下是搜索变量范围的顺序:

  • 函数本地(VAR关键字)
  • 线程本地(CFTHREAD)
  • 查询结果
  • 函数参数
  • 局部变量
  • CGI变量
  • 文件变量
  • URL参数
  • 表单字段
  • COOKIE值
  • 客户变量
  • 编辑:它还告诉我们哪些作用域是未搜索的:会话、服务器、应用程序

    作用域顺序 ColdFusion 9的规范作用域顺序为:

  • 本地(仅限CFC和UDF内部)
  • 参数(仅在CFC和UDF中)
  • 线程本地(仅在线程内部)
  • 查询(仅在查询循环内)
  • 线程(仅在调用线程的线程和模板内部)
  • 变数
  • CGI
  • Cffile
  • 网址
  • 形式
  • 饼干
  • 客户
  • 您可以在中查看Adobe关于此的文档

    但是,某些作用域仅在某些上下文中可用,因此根据代码的上下文,搜索作用域的顺序是不同的

    内部CFML(无螺纹)
  • 变数
  • CGI
  • Cffile
  • 网址
  • 形式
  • 饼干
  • 客户
  • CFC内部(无螺纹)
  • 本地的
  • 论据
  • 查询(仅在查询循环内)
  • 变数
  • CGI
  • Cffile
  • 网址
  • 形式
  • 饼干
  • 客户
  • 最佳做法 正如Al Everett在其回答中所指出的,最好的做法是始终范围变量。显式作用域生成的代码不那么模棱两可,通常更快。任何时候,如果不确定变量的作用域,就有可能从一个不打算确定的作用域中获取一个变量

    当您正在访问的变量位于搜索顺序的第一个作用域中时,实际上取消变量的作用域稍微快一点。这是因为在ColdFusion解决变量名中的每个点时都会产生很小的成本。例如,在CFC方法中,访问
    myVar
    local.myVar
    稍微快一点。这仅适用于:

    • local
      CFC或UDF内的作用域变量
    • 线程
      local
      线程内的作用域变量
    • 变量
      CFML中的作用域变量
    在所有其他情况下,显式声明范围会更快(更清晰)

    使用这种技术应该被认为是不好的做法。您应该只在性能关键型代码中使用此技术,这样可以保证变量始终存在于预期范围内。请记住,这是以增加歧义为代价的


    在1和2之间,如果您谈论的是使用组件的应用程序,那么应该有组件的变量和组件的此作用域。