何时对 ColdFusion 组件中的变量进行 var 作用域?

Posted

技术标签:

【中文标题】何时对 ColdFusion 组件中的变量进行 var 作用域?【英文标题】:When to var scope your variables in ColdFusion components? 【发布时间】:2011-07-17 11:28:10 【问题描述】:

(a) 在什么情况下您应该对范围变量进行 var 以及 (b) 在什么情况下您不应该在 ColdFusion 组件中更改范围?

【问题讨论】:

【参考方案1】:

当您不希望变量的值受到 a) 访问同一实例的其他请求或 b) 同一实例中的其他方法的影响时,您应该对变量的范围进行 var。

Henry 是一个很棒的人,但他的声明是“如果每次都实例化 CFC,您就不需要 var 范围变量。”是不正确的。 :) [编辑:Henry 已经编辑了他的答案] 我在这篇博文中写了一个例子来说明这一点:

http://daveshuck.com/2006/11/28/thread-safety-example-var-scope-your-loop-index-in-coldfusion-cfcs/

您可以看到我通过在一个函数中向上计数并在另一个函数中向下计数来创建一个无限循环。在这种情况下,无论是单例用户还是多个用户请求同一个实例都无关紧要,但在单个请求中,一个函数会覆盖另一个函数中的值。

【讨论】:

那我的回答就没有意义了! :) 我应该补充一点,我的典型经验法则是“Var 范围,除非您有特殊需要!”【参考方案2】:

当您在 CFC 中实现一个跨多个请求共享的函数时,您应该为您的变量设置 var 范围(即应用程序范围内的单例、服务 CFC)

如果每次都实例化 CFC,并且您的方法没有调用同一 CFC 中可能访问您在调用者方法。比如你直接通过 web 服务或者 ajax 调用的远程方法,它不会调用其他使用你没有 var scope 的 var 的方法,或者 CFWheels 中的 Controller。

“您应该始终使用 var 关键字定义函数局部变量。”每个 CFC 变量和范围文档 http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=buildingComponents_29.html

【讨论】:

谢谢亨利。即使每次都实例化 CFC,仍然试图弄清楚它是否正确。在 Wheels 中,您可以 var 作用域为您不希望视图访问的变量。【参考方案3】:

我们将所有变量的范围限定在一个函数中,以便它们仅在该函数中保持本地。至于组件,您可以使用变量或 this 范围使变量可用于组件中的任何函数。如果您正确设置访问权限,“this”作用域还将使变量直接可供调用程序使用。

【讨论】:

我应该提一下,使用调用程序中的“this”变量不是好的 OO 实践,但如果您愿意,它是可用的。【参考方案4】:

I var scope 任何不是全局变量或组件成员的变量。您要做的最后一件事是在变量范围内创建或覆盖全局变量

【讨论】:

真的有全局变量吗?变量范围很接近,但我想它只能在 cfc 中使用。 发现了一些有趣的文档livedocs.adobe.com/coldfusion/8/htmldocs/…

以上是关于何时对 ColdFusion 组件中的变量进行 var 作用域?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ColdFusion 中对结构数组进行排序

Coldfusion 和非作用域变量

尝试将具有多个XOR组件的PHP hash_hmac转换为coldfusion

更改 CF9 中的 OnRequestEnd 行为(是 ColdFusion 9 错误 - 无法在 OnRequestEnd 中引用请求变量)

cfcomponent 中的 cfquery 未在 Coldfusion 9 中返回最新结果

如何对服务中的 BehaviorSubject 变量进行单元测试,它是组件中的可观察对象