我一直在阅读有关的CF范围,并感到舒适与CFC范围及其影响( 这里详述 ),但是,每当我搜索CF作用域它几乎总是在CFC的情况下引用-所以我希望作出一些澄清围绕作用域的CFM页面。 我与CF 9/10所以只有真正感兴趣的工作的范围在这些版本中的行为方式。
什么范围是可用CFM页面上 - 难道CFM页面具有相同的并发性问题可以在其他地方发生,或者是变量作用域绑定到特定请求的范围CFM页面上?
如果我包括行<cfset myVar = 10 />
在一个CFM页,其范围将其列入? 有没有访问变量或其他CFM页面访问它在同一页上任何其他用户的危险吗?
谢谢
几乎所有的除了“这个”是在CFM页面的有效范围。
在CFM页声明未范围变量可以直接调用,也可以用变量的作用域前缀被调用。
例如:
<cfset varA = 'someValue'/>
也可以写成
<cfset VARIABLES.varA = 'something' />
据我所知,除非你创建一个单身(仅适用于CFC的),并把它的应用范围,你永远不会冒险与其他用户共享变量。 这也是有效的,如果一个不小心在CFC功能正常作用域的局部变量。
在一个CFM页,每个用户请求都有自己的处理线程,永远不会与其他用户的请求交叉。 因此,变量只能绑定到特定请求的范围。
如果你想有一个变量被所有用户请求一个页面中使用,你可以把应用程序范围内。
我不太明白你的第二个问题。 如果你可以在上面细说了,可能是我可以添加更多的到我的回答。
更新
此代码会帮你回答2个问题。
<cfscript>
function a(){
_a = 20;
WriteOutput("Inside function:"&variables['_a']);
WriteOutput("Inside function:"&variables['_b']);
}
_b = 30;
a();
WriteOutput('outside function:'&variables['_a']);
</cfscript>
产量
内部功能:20
内部功能:30
外功能:20
这一页 ,给出了可用范围的一个很好的解释。
如果你看够硬,你会发现关于如果你没有你的范围变数会发生什么情况的详细信息。 它的要点是,你的代码将正常运行,但是效率较低。 其原因是,ColdFusion的将尝试找到正确的范围。 它检查特定的范围,在一个指定的顺序。 这顺序是somwhere,我只是不能很快找到它。
关于第二个问题,
<cfset myVar = 10>
放myVar的变量到变量的作用域。
对于一个用户更改影响其他用户的变量,我相信这是有风险的唯一范围的应用范围。 但是,随着现代浏览器,可以为单个用户乱了自己的会话变量。 我见过它做。
该变量可能会被意外更改的另一种方法是用功能。 如果你想保持你的局部变量的函数,你当你实例化他们使用var关键字。 在CF的更高版本中,有一个本地范围是完成同样的事情。
就个人而言,我范围我所有的变量除了变量的作用域。