4

我知道正确的使用方法<cflock>是 cf 开发人员在 www 上的一个相当大的话题。

当我试图更好地理解它时,我创建了一个简单的 UDF,它接受一个会话数组,我想知道这是否是一种正确的做法,因为它是一个简单的 UDF。

<cffunction name="currentCartQuantity" access="public" returntype="string">
<cfargument name="partnumber" type="numeric" required="yes">
<cfargument name="data" type="array" required="yes">

<cfset var return_data = "0" >
<cflock type="readonly" scope="session" timeout="1">
    <cfloop from="1" to="#arrayLen(arguments.data)#" index="idx">
        <cfif arguments.data[idx].partnumber IS arguments.partnumber >
            <cfset return_data = arguments.data[idx].quantity >    
        </cfif>
    </cfloop>
</cflock>
<cfreturn return_data >
</cffunction>

这是一个简单的函数,它接受一个数组类型的参数,它是一个购物车的会话变量。它还接受一个数字partnumber。然后搜索结构数组以找到匹配的值。

由于这是一个会话数组,我想我会对其应用 a cflock,以便它知道锁定数组的读取,以防 CF 版本有任何差异,我使用 ColdFusion 8 对此进行了编码,并且我我希望任何经验丰富的 CF 开发人员都能够确认这是锁定会话变量读取的正确方法。

加载页面时,此函数最多可处理 200 次,这是处理此类数据的最佳方法cflock吗?

4

1 回答 1

3

在 ColdFusion 中,数组是按值复制的,因此这不是会话范围内的数组,而是它的副本。无需锁定它。

但是有必要确保你所有的函数局部变量都是VARed:idx不是。

于 2013-10-05T07:34:48.337 回答