3

我继承了一个项目,其中为一些 Ajax 请求打开了许多远程 CFC,并且在 CFC 中的大多数方法内部具有以下内容:

<cfset var this.response = true />

现在我从来没有见过像这样一起使用的varthis范围,所以我真的不知道该怎么做所以我想我的问题是:

这是如何编码的有什么问题吗?如果是这样,它们是否足够重要,以至于我应该努力将所有 CFC 更新为类似的东西 <cfset var req.response = true />

这是我所看到的一个简单示例:

<cfcomponent>

    <cffunction name="check_foo" access="remote" returnformat="plain">

        <cfargument
          name     = "isfoo"
          type     = "string"
          required = "false"
          default  = "nope"
          hint     = "I check the string for foo"
          />

        <cfscript>

          /*setup new response*/
          var this.response = false;

          /*check for foo*/
          if( !findnocase( "foo", arguments.isfoo ) ) {

            /*no foo!*/
            this.response = false;

          }

          return this.response;

        </cfscript>

    </cffunction>

</cfcomponent>

.


更新:

  1. 根据下面的反馈/答案,我已经替换了var this. 再次感谢所有提供帮助的人!

.


4

2 回答 2

4

更新:检查您的转储后,“this”var this仍然是这个this范围,而不是 local.this。

它正在设置对this范围的响应,它在这种情况下起作用,因为每次远程调用 CFC 时都会实例化它。但是,最好重命名this为其他名称以确保线程安全,以防该方法被其他 CFC 作为公共方法调用。

于 2012-07-09T21:54:22.087 回答
3

使用var this与使用相同this

转储local范围将包括局部变量以及ArgumentsThis范围。(找不到这个记录;但我在一个裸 cfc 中得到了这个结果,你在你的截图中得到了它。)

因为您的功能是access="remote"每次调用都会获得 cfc 的新实例,因此是一个裸This范围。所以这些是“安全的”,但仍然是个坏主意。

var this如果在非远程函数中有任何使用,那么您将获得不希望的持久性,并且可能会遇到导致无效数据的竞争条件。

相关 CF 文档:

"通过 Flash Remoting 和 Web 服务远程执行的方法总是在执行该方法之前创建一个新的 CFC 实例。 "

"只要 CFC 实例存在,此范围中的变量值就会持续存在,因此可以在对 CFC 实例的方法的调用之间持续存在。 "

于 2012-07-10T09:23:55.607 回答