gpt4 book ai didi

coldfusion - Application.cfc 函数中的变量是否需要作用域?

转载 作者:行者123 更新时间:2023-12-03 10:02:31 24 4
gpt4 key购买 nike

向群众提问。我们对我们的团队非常严格地限制了 CFC 中函数内部的局部变量的范围。最近虽然出现了 Application.cfc 中作用域变量的问题。像 onRequestStart() 这样的函数中的无作用域变量是否与我们知道其他组件中函数中的局部变量一样,面临被其他并发运行的 session 访问的风险?或者由于 Application.cfc 中函数的性质,它们以某种方式被区别对待?

最佳答案

您的问题与两个完全独立的问题相邻(这两个问题都需要澄清和解决)。这两个问题是:

  • 我应该在引用变量时正确地确定它们的范围(即 APPLICATION.settings 与 SESSION.settings)。

  • 对此的简短回答是: .它使代码更清晰、更易读/更易于管理,并防止以后在重用变量名时可能遇到的变量作用域冲突。

    如果您创建 APPLICATION.settings 和 SESSION.settings,但尝试在没有范围的情况下引用它们(即 <cfset myvar = settings /> ),您将遇到变量冲突问题,因为它们默认会被倒入 VARIABLES 中——因为APPLICATION 和 SESSION 都没有被检查来解决范围歧义。

    第二个问题是:
  • 我是否应该担心在 Application.cfc 中访问的变量可能会在并发环境中被多个用户共享?

  • 对此的简短回答是: .您应该知道并理解如何访问共享变量的后果,以及 <CFLOCK>他们在适当的地方。

    不幸的是,CF 社区通常永远不会向 CF 社区澄清您锁定共享变量的确切时间和地点,所以让我总结一下:
  • onApplicationStart() 单线程访问 APPLICATION 范围。您不需要锁定在此方法中读取/写入的 APPLICATION 变量。
  • onSessionStart() 单线程访问 SESSION 范围。和以前一样的答案。
  • 如果您提供 任何 一种从 onRequestStart() 方法中访问 SESSION 或 APPLICATION 的机制——或之后的任何其他模板(例如直接调用 onApplicationStart() 的 URL 重新加载参数)——所有赌注都关闭了——你现在必须正确处理锁定您的共享变量读写。
  • 关于coldfusion - Application.cfc 函数中的变量是否需要作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188015/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com