如果我在一个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作用域?
考虑到我不能轻易地复制来自不同请求的多个同时调用,考虑到实际应用程序可能会遇到的情况,我测试这种溢出的最佳方式是什么,以便我可以“自己看到它”?
谢谢你的见解。
发布于 2015-02-20 23:12:20
好的,显然这并不像我想的那样难以测试(感谢David Faber的建议)。通过在cfc中转储变量作用域,我们可以很容易地看到cfmodule调用是否“污染”了cfc的变量作用域。当cfmodule使用它自己的caller作用域时,就会发生这种情况。
事实证明,这很容易在调用cfmodule之前通过"var作用域“确定方法中任何有问题的变量的作用域来解决。实际上,这样做可以防止cfmodule变量大量溢出。
如果方法中没有var作用域变量,溢出确实会发生(正如预期的那样)。这是我的直觉,但考虑到它的影响,我想要完全确定。谢谢!
https://stackoverflow.com/questions/28631755
复制相似问题