gpt4 book ai didi

coldfusion - CF8 与 CF10 : local scope declared in parent not visible in child functions

转载 作者:行者123 更新时间:2023-12-03 16:48:54 28 4
gpt4 key购买 nike

我有很多为 ColdFusion 8 编写的代码在 ColdFusion 10 中失败了。我意识到 CF9 和更高版本处理“本地”范围的方式与以前不同。我的问题是我已经编写了扩展每个函数的代码,因为子实例从父实例继承变量。但为了明确我的意思,让我举一个例子来说明在 CF10 中什么是有效的以及它是如何失败的。

以两个 CFC 为例,一个子 CFC 扩展了父 CFC:

<!--- Parent.cfc --->
<cfcomponent displayname="Parent">

<cffunction name="SomeFunction" output="yes">
<cfset local.parent_val = "Declared in parent instance">
</cffunction>

</cfcomponent>



<!--- Child.cfc --->
<cfcomponent displayname="Child" extends="Parent">
<cffunction name="SomeFunction" output="yes">
<cfset local.child_val = "Declared in child instance">

<!--- The following "super" call will instantiate the "parent_val" variable
from within the parent CFC's version of this function... but only in CF8? --->
<cfset Super.SomeFunction() />

<p>#local.child_val#</p>
<p>#local.parent_val#</p>
</cffunction>
</cfcomponent>

调用为:
<cfset ChildCFC = CreateObject("component","Child") />
<cfoutput>#ChildCFC.SomeFunction()#</cfoutput>

在 CF8 我得到:
Declared in child instance
Declared in parent instance

在 CF10 中,我得到:
Declared in child instance
[error dump showing "Element PARENT_VAL is undefined in LOCAL."]

如您所见,在 CF10 中,即使在调用函数的父版本(通过“super”)之后,在父版本中声明的局部变量也无法像在 CF8 下那样在子代中访问。

所以,我的问题是:是否有希望恢复上述示例中设计的架构?如果没有,是否有我遗漏的简单迁移技巧?

我的很多代码都希望子函数能够通过使用 SUPER 调用来“查看”父函数中声明的变量(如上例所示)。对于那些面临从 CF8 到当前的过渡的人,我很感激你在这里的想法和建议。

最佳答案

在 Parent.cfc 中的 CF8 SomeFunction()

local.parent_val = blah // sets to variables.local.parent_val, dies with object

在 Parent.cfc 中的 CF9 SomeFunction()
local.parent_val = blah // eqv to var parent_val, dies right after function quits

您在 CF8 中的代码一开始就错了。如果它是函数本地的,它应该有一个 var local = {}在函数的第一行。那么行为在 CF9+ 中不会改变。

如果您现有的代码库没有遇到线程安全问题,那么我认为您可以重命名 local.variables.对于您希望与对象一起存在并稍后可由 child 访问的变量。

关于coldfusion - CF8 与 CF10 : local scope declared in parent not visible in child functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com