coldfusion函数中cfparam和cfargument之间的差异?

coldfusion函数中cfparam和cfargument之间的差异?,coldfusion,coldfusion-9,cffunction,Coldfusion,Coldfusion 9,Cffunction,当在cffunction标记后面调用时,这两个代码块之间的区别是什么: <cfparam name="bork_bork_bork" default="false"> <cfargument name="bork_bork_bork" required="false" default="false"> 与默认属性一起使用时,将确保变量存在。因为没有指定范围,bork\u bork\u bork被放入变量范围 用于将参数传递给函数。这些值存储在参数范围中。您可以使用参

当在cffunction标记后面调用时,这两个代码块之间的区别是什么:

<cfparam name="bork_bork_bork" default="false">

<cfargument name="bork_bork_bork" required="false" default="false">

与默认属性一起使用时,将确保变量存在。因为没有指定范围,
bork\u bork\u bork
被放入
变量
范围

用于将参数传递给函数。这些值存储在
参数
范围中。您可以使用
参数.bork\u bork\u bork
访问该值


请注意,
arguments.bork_bork_bork
bork_bork_bork
是不同的。
参数的范围
仅在函数中,另一个存储在
变量
范围中,并且在页面上的任何位置都有效(尽管我不建议这样编码)。

cfparam是一种在变量不存在时为任何变量设置默认值的方法。这是执行以下操作的快捷方式:

<cfif NOT isDefined('bork_bork_bork')>
    <cfset bork_bork_bork = 'myDefaultSetting'>
</cfif>

cfargument仅在开始标记后可用,用于定义传递给CFC函数或用户定义函数的参数


据我回忆,cffunction标记和cfargument标记之间不可能存在任何内容,因此它们必须出现在cffunction标记之后。

在函数中,您可以通过arguments作用域{arguments.bork_bork_bork}或数组{arguments}访问cfargument

cfparam只会确保变量在请求时可用,不应使用is代替cfargument。如需进一步阅读,请查看:


cfparam与函数无关。鉴于param/argument在大多数语言中都是可互换的单词,我可以看出这是令人困惑的。请记住,直到版本5,用户定义的函数才添加到CF中,因此使用cfparam作为初始化变量的方法没有冲突。此外,cfparam标记的名字可能来自现在已经过时的函数ParameterExists()(反之亦然——当我进入CF时,在4.0版(1999年),该函数已经被弃用,因此我错过了它背后的历史)

+1,以获得这一重要澄清。此外,如果CFC函数驻留在CFC中,并且CFC缓存在持久内存作用域(即应用程序)中,则cfparam变量将在该对象的生命周期内保持不变(因为该变量作用域解释相同),包括多个请求,以及每个请求可能有多个调用…这,如果您没有针对该逻辑进行专门的计划…可能很难捕获/调试。+1。还要记住,cfparam与一个整体进行交互。如果
bork\u bork\u bork
已在这些作用域中声明,则不会应用默认值,这将再次导致意外结果。在这种情况下,最好使用cfargument。