在ColdFusion组件(CFC)中,是否有必要对变量范围的变量使用完全限定名称?
如果我改变这个,我会不会遇到麻烦:
这个?
Soldarnal.. 10
创建变量时指定"变量"无关紧要,因为默认情况下foo将放在变量范围内; 但是当你访问变量时它会很重要.
doSomething("args")返回"我有args和函数局部变量 "
doAnotherThing("args")返回"我有一个变量的私有实例和一个函数局部变量."
创建变量时指定"变量"无关紧要,因为默认情况下foo将放在变量范围内; 但是当你访问变量时它会很重要.
doSomething("args")返回"我有args和函数局部变量 "
doAnotherThing("args")返回"我有一个变量的私有实例和一个函数局部变量."
我会说是的.这显然是必要的吗?不.你可以逃避不做吗?当然.你在找麻烦吗?绝对.如果你在cffunction中有以下内容:
这不会将该变量放在函数local var scope中,它会将它放在CFC的全局VARIABLES范围内,这意味着它可用于该CFC的每个方法.有时你可能想要这样做,但大多数时候你会要求竞争条件.
当服务器正在读取任何变量时,如果该变量不是作为范围的一部分声明(REQUEST.,SESSION.等),那么ColdFusion将运行ScopeCheck()来确定变量所在的范围.不仅这会给您的应用程序服务器带来不必要的开销,它还会引入劫持功能,即您的变量位于一个范围内,但ScopeCheck()已经在优先顺序中找到了同名的变量.
始终,始终,始终,范围所有变量.无论多么微不足道.甚至包括查询名称和循环索引.从痛苦中拯救自己,以及那些来到你身后的人.
特别是在CFC中,适当的范围是重要的.额外的"冗长"值得清晰.将变量从其入侵范围中移除将导致严重问题并且很难诊断.
冗长并不总是坏事.我们以getAuthenticatedUser()等描述方式命名我们的函数和方法,而不是gau().数据库列和表最好是描述性的,如EmployeePayroll而不是empprl.因此,当您的短期记忆充满项目细节时,简洁可能会"更容易",但描述性显示您的意图并且在应用程序的维护阶段有用,在您的短期记忆充满其他东西很久之后.