coldfusion CFM变量范围

rhi*_*nds 9 coldfusion scope

我之前曾在cfm页面上询问有关cf范围的问题(很高兴我了解CFC范围和潜在问题),但我对变量范围仍然不清楚.

在上一个问题的答案中,有人建议使用cfm页面没有线程安全问题,并且你不会得到两个不同用户访问同一页面并具有竞争条件或线程安全问题的场景(即使我只需将我的变量保留在默认的cfm变量范围内,并且每个用户的变量范围将是独立且独立的(这是我的最后一个问题Coldfusion Scopes澄清)

但是,我已经阅读了这篇博客文章http://blog.alexkyprianou.com/2010/09/20/variables-scope-in​​-coldfusion/,关于在cfm页面上使用函数并使用变量范围,这似乎是建议一个场景,其中变量范围在多个用户之间共享(我在CFC的上下文中理解这个问题 - 它们更类似于java类,变量范围是实例变量,因此如果CFC是共享/应用程序,则会出现线程安全问题范围/单例)但这似乎与先前的答案相反 - 如果由cfm页面上的函数放入变量范围的变量可以被其他用户访问,那么在cfm页面代码中直接放置在变量范围内的变量是否相同?

我希望有一些明确的文档和指南,但实际上并没有找到对不同范围及其可用位置的明确解释.

谢谢!

Ada*_*ron 12

丹是正确的,问题中引用的博客文章是完全错误的.Dan的代码演示了它,我已经在我的博客上写了这篇文章并进行了彻底的测试(它太大了,不能再去了).

底线是CFM中的变量范围对这种竞争条件是安全的,因为每个请求的变量范围是不同的内存.所以一个variables.foo与另一个不同variables.foo,所以两者都不相交.

这同样适用于变量范围中的对象:它们的内部变量范围是一个独特的实体,因此任意数量的请求都可以在请求的变量范围中实例化CFC,而CFC实例的变量范围也都是离散实体.

变量范围唯一可以参与竞争条件的是存储在共享范围中的对象的变量范围.因为对该共享范围对象的所有引用都将引用内存中的同一对象,所以同一对象的变量范围在内存中.