2

在 cffunction 标记之后立即调用这两个代码块有什么区别:

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

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

4 回答 4

12

<cfparam>,当与默认属性一起使用时,将确保变量存在。因为没有指定范围,bork_bork_bork所以被放到了Variables范围内。

<cfargument>用于将参数传递给函数。这些值存储在Arguments范围内。您将使用 访问该值arguments.bork_bork_bork

注意arguments.bork_bork_borkbork_bork_bork不一样。的范围arguments仅在函数内,另一个存储在Variables范围内,并且在页面上的任何位置都有效(尽管我不建议这样编码。)

于 2012-01-23T21:53:56.007 回答
2

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

于 2012-01-23T23:46:27.593 回答
1

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

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

cfargument 只能在开始标记之后使用,以定义要传递给 CFC 函数或用户定义函数的参数。

据我回忆,cffunction 标签和 cfargument 标签之间不能存在任何东西,所以它们必须出现在 cffunction 标签之后。

于 2012-01-23T22:00:17.777 回答
0

在函数中,您将通过参数范围 {arguments.bork_bork_bork} 或数​​组 {arguments 1 }访问 cfargument

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

构图

将 Arguments 范围用作数组

使用 cffunction 标签定义函数

于 2012-01-23T22:02:58.280 回答