运行 CF 9,0,1,274733
我有一个自定义的 DAO CFC,它有一个名为 getGamesBetTypesID() 的方法。
该方法由 CF 从以下属性隐式生成/合成:
<cfproperty name="gamesBetTypesID" type="numeric" />
默认变量定义如下:
<cfset VARIABLES.gamesBetTypesID = 0 />
除此之外,没有其他变量、变量、本地、参数或称为 getGamesBetTypesID 的方法。所有 CFC 和函数变量的范围都正确。
这个 save() 方法被调用了数千次,但以下错误是随机抛出的,而且只有少数几次。
Detail: The symbol you provided getGamesBetTypesID is not the name of a function.
Message: Entity has incorrect type for being called as a function.
这是 save() 方法:
<cffunction name="save" access="public" returntype="void" output="false">
<cfif getGamesBetTypesID() eq 0 or getGamesBetTypesID() eq "">
<cfset create() />
<cfelse>
<cfset update() />
</cfif>
</cffunction>
当错误被抛出时,我使用日志记录 CFC 元数据的转储
getMetaData(gamesBetTypesObj)。根据元数据,函数 getGamesBetTypesID 确实存在。
以前有没有其他人解决过这个问题?我读过它可能由于命名和范围冲突而发生,而我没有。
提前致谢。
最佳答案
发布上述问题后,我删除了 <cfproperty name="gamesBetTypesID" type="numeric" />
并为 VARIABLES.gamesBetTypesID
添加了明确的 getter 和 setter .
<cffunction name="getGamesBetTypesID" output="false" access="public" returntype="numeric">
<cfreturn VARIABLES.gamesBetTypesID />
</cffunction>
<cffunction name="setGamesBetTypesID" output="false" access="public" returntype="void">
<cfargument name="gamesBetTypesID" required="true" type="numeric" />
<cfset VARIABLES.gamesBetTypesID = ARGUMENTS.gamesBetTypesID />
</cffunction>
这段代码已经在生产环境中运行了一周,包括一个周末,这是我们忙碌的时期。在过去的 7 天内没有抛出任何异常。以前,忙碌的一天最多会抛出 15 个异常。
这使我相信通过
<CFPROPERTY>
生成/使用隐式访问器存在错误。只出现在某些情况下。我要记录一个错误 Adobe如果有任何进展,我会更新。
关于Coldfusion,你提供的符号 [method_name] 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689204/