coldfusion – CFWheels – 我应该在当地确定我的车轮动作范围吗?

说我有一个非常简单的控制器,如下所示:

<cfcomponent extends="Controller">
    <cffunction name="hello">
        <cfset time = Now()>
    </cffunction>
</cfcomponent>

在直接的ColdFusion / Railo中,我会在本地范围内查找所有变量……但是我看到的每个轮子都没有.

这可能会让我获得年度奖项中最愚蠢的问题,但这是我想到的,因为似乎没有人能够正确展示他们的Wheels代码范围?

我会写如下:

<cfcomponent extends="Controller">
    <cffunction name="hello">
        <cfset local.time = Now()>
    </cffunction>
</cfcomponent>

我不确定Wheels是否可以采取措施来解决这个问题,这就是为什么我看到我到处做什么……或者只是一个糟糕的编程案例?

谢谢!
米奇

最佳答案
是的,你应该确定它.

在你的第一个例子中,你是(通过不作用域)在大多数情况下设置变量.time,它是组件实例的本地,而不是函数 – 如果这是作为函数局部变量(即local.time)但是在组件的变量范围内,并且该组件是共享/持久的,这可能会导致问题(尽管可能只会在重负载下显示自己).

如果将变量放在变量范围内是故意的,那么它仍然应该是显式范围的(作为variables.time),否则如果在启用了localmode设置的Railo服务器上使用它可能会导致问题.

由于cfWheels设计决策(参见注释中的链接),将变量放在变量范围内需要将变量传递给视图,即使它们在技术上可能是函数/视图的本地变量. (控制器实例只针对单个请求,避免了通常需要的问题.)如前一段所述,localmode设置(如下所述)意味着当您无法控制所有服务器时,仍建议明确指定范围.代码将部署到.

Railo的本地模式设置

Railo(自v1起)有一个名为“localmode”的管理设置,它定义了分配一个未编组的变量是否会转到本地范围,而不是组件的变量范围 – 不需要显式的var / local范围(如果你知道你的代码将会仅在启用了该设置的Railo服务器上运行).

由于默认情况下该设置处于关闭状态,并且ColdFusion没有这样的设置,因此跨引擎兼容代码应始终包含此类变量分配,以避免出现问题.

转载注明原文:coldfusion – CFWheels – 我应该在当地确定我的车轮动作范围吗? - 代码日志