如果我在 CFC 中有一个方法需要通过模块调用调用一些遗留代码(以执行一些关键功能),我是否面临变量“出血”的风险?例如:
<!--- in my cfc --->
<cffunction name="myFunc">
<cfset var qData = "">
<cfmodule template="some_legacy_code.cfm" attr1="hi" attr2="hello">
<cfreturn qData>
</cffunction>
<!--- in some_legacy_code.cfm --->
<cfquery name="qData">
select * from x
</cfquery>
<cfset caller.qData = qData>
在本例中使用 caller.qData 是否会污染调用 CFC 的变量范围,即使我已经对 qData 进行了 var 作用域?
考虑到我无法像真实应用程序可能遇到的那样轻松地复制来自不同请求的多个同时调用,测试这种出血的最佳方法是什么?
感谢您的见解。
最佳答案
好吧,显然这并不像我想象的那么难测试(感谢 David Faber 的建议)。通过转储 cfc 中的变量范围,我们可以轻松查看 cfmodule
是否call 正在“污染” cfc 的变量范围。当 cfmodule 使用自己的 caller
时,会发生这种情况范围。
事实证明,在调用 cfmodule 之前,可以通过“var 范围”确定方法中任何有问题的变量来轻松解决此问题。事实上,这确实可以防止 cfmodule
流淌的变量。
如果方法中没有 var 作用域变量,则确实会发生溢出(如预期)。这是我的直觉,但考虑到其影响,我想完全确定。谢谢!
关于coldfusion - cfc 中的 var 作用域和模块调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28631755/