正确使用cflock标签ColdFusion

时间:2013-10-05 02:18:38

标签: coldfusion coldfusion-8

我知道使用<cflock>的正确方法是cf for cf开发者的一个很大的对话主题。

由于我试图更好地理解它,我已经创建了一个简单的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。然后搜索结构数组以查找匹配值。

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

加载页面时,此功能最多可处理200次,这是使用cflock处理此类数据的最佳方式吗?

1 个答案:

答案 0 :(得分:3)

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

需要确保所有的函数局部变量都是VAR ed:idx不是。