Coldfusion 处理可选参数:CFArgument与isDefined
我有一个关于Coldfusion 处理可选参数:CFArgument与isDefined,coldfusion,parameter-passing,cffunction,Coldfusion,Parameter Passing,Cffunction,我有一个关于cfargument的问题。如果我在调用.cfc时发送参数,那么首先将其定义为参数有什么好处吗 <cffunction name="someFunction" ....> <cfargument name="myArg" required="no"> 或者我可以在函数内部使用IsDefined(),而不定义参数吗 <cffunction name="someFunction" ....> ... <cfif isDe
cfargument
的问题。如果我在调用.cfc
时发送参数,那么首先将其定义为参数有什么好处吗
<cffunction name="someFunction" ....>
<cfargument name="myArg" required="no">
或者我可以在函数内部使用IsDefined(),而不定义参数吗
<cffunction name="someFunction" ....>
...
<cfif isDefined("arguments.myArg")>
do something
</cfif>
...
做点什么
我试过了,知道它们都管用。但是,定义参数和使用isDefined()有什么区别?这会影响效率吗 这不是关于效率,而是关于文档。这是我公司的编码标准文档中关于
cfargument
的一个例外
在ColdFusion函数中使用CFARGUMENT标记时,需要以下属性:
- 名字
- 类型
- 必需的
- 暗示
cfargument
标记,但它们提供验证(类型安全)并充当附加文档,因此始终为函数期望的每个命名参数提供cfargument
标记
规则:
type
属性。尽量避免使用type=“any”
required=“true”
,但不要指定默认属性值
required=“false”
并指定默认值
属性值default
,而是在函数体中使用structKeyExists(参数,“ARGNAME”)
(请记住,当您指定default
时,您无法区分忽略该参数的调用方与提供与参数相同的默认值的调用方之间的区别)foo
,引用arguments.foo
)HTH@KevinB的评论是找到答案的途径。@DanBracuk*gong“ohmmmmmm”@espresso_coffee-IMO,它应该包含在cfarguments中。函数签名是一个合同,告诉消费者它需要和/或接受什么类型的信息。如果使用isDefined,调用方不知道要提供什么类型的值,这是不好的形式。请注意,使用structKeyExists而不是isDefined。前者更精确se.@espresso_coffee-KevinB指的是my。希望它能更好地反映您真正的要求。如果不是,请随意更改它。
structKeyExists(参数“myArg”)
应始终在函数中工作。如果您遇到涉及URL作用域的错误,则说明您做得不对。我不能确切地告诉您,因为我看不到您的代码…我始终使用cfargument
定义任何可能的参数。这有助于下一个开发人员了解他们在函数中可以期望什么。另一个b好处是,如果在cfargument
中定义type属性,则如果传入参数,它将在该类型上进行验证(例如,对于数值,type=“numeric”
)。这将是对SO的coldfusion文档页面的一个很好的补充:不要评判您公司的指导原则,但规则#7可能会导致大量数据的开销。您应该考虑提供的参数实际用于什么。通过引用传递内容没有错(具有非确定性函数),如果有相应的文档记录。一般强制(如“始终重复参数范围”)可能有一天会适得其反。#7仅在通过引用(例如结构)传递参数时,他们希望操纵参数的值。我们有多个级别的代码审查、性能审查和在多个环境中的测试,可以捕获您描述的任何问题。不过,提出潜在的危险是值得的。