use*_*580 6 coldfusion constructor init
我对ColdFusion中的构造函数有一些疑问:
init作为构造函数名称吗?如果我在不调用init方法的情况下创建组件的实例,会返回什么?
实例= CREATEOBJECT( "部件", "cfcName"); //现在实例的值是多少
我可以取出init方法中的代码并删除init方法,然后将代码粘贴到组件的头部,它是否与init构造函数具有相同的效果?
十分感谢.
Tom*_*lak 13
我必须使用名称init作为构造函数名称吗?
不,您可以按照自己喜欢的方式命名初始化函数.init()仅仅是一个惯例.它不是真正的构造函数,因为它不会自动调用.
如果我在不调用init方法的情况下创建组件的实例,会返回什么?
正如您所期望的那样,返回组件实例.init()函数的存在与否完全无关紧要.ColdFusion组件中没有静态函数的概念,您始终可以从中获得完全构造的实例GetObject("component", ...).(对于刚刚在第一次使用之前构建的Java对象,如果您忘记/不手动执行,则不是这样.)
我可以取出init方法中的代码并删除init方法,然后将代码粘贴到组件的头部,它是否与init构造函数具有相同的效果?
是的,只要init()方法没有采取任何参数,就没有区别.
但是,有一个被调用的方法init()返回组件实例是一种惯例.即使它除了" " 之外什么都不做<cfreturn this>.我会保持一致,并为每个组件添加一个,即使它不是绝对必要的.
Ada*_*tle 10
Tomalak对ColdFusion 8的回答是正确的; 然而,今年晚些时候推出的ColdFusion 9的情况正在发生一些变化.(为了完整起见,我将复制Tomalak的答案并根据需要进行调整,所以感谢先行.:))
我必须使用名称init作为构造函数名称吗?
CF8:不,您可以将初始化函数命名为您喜欢的任何名称 - "init"仅仅是一种约定.它不是一个真正的构造函数,因为它不会被自动调用.
CF9:答案仍然是"不",你没有必要.但它可能适合您:这适用于在cfscript(或仅限脚本的组件,也在CF9中)中创建对象.在import和new关键字被添加,你将能够创造像这样一个对象的实例:
import model.security.*;
userObj = new User();
Run Code Online (Sandbox Code Playgroud)
这假定您User.cfc在model/security/文件夹内部.此外,CF9将查找是否存在名为"init"的方法或与对象名称相同的方法(在本例中为"User"),并隐式将其称为构造函数.
我不确定传入new指令的参数是否会将它们转发给构造函数,就像在Java/C中看到的那样.我认为它会,但我还没有看到任何表明这种或那种方式的演示文稿或代码示例; 并没有自己测试,因为它只是在我写这篇文章时发生的.;)(另一个想法:我想知道是否会支持具有不同参数集的多个构造函数.我对此表示怀疑,但这是一个很好的想法.)
我假设有一些暗示类似的功能可能会出现在CFML(基于标签的语言,与cfscript分开)中,但此时没有任何说法.
如果我在不调用init方法的情况下创建组件的实例,那么返回什么?
正如您所期望的那样,返回组件实例.init()函数的存在与否完全无关紧要.ColdFusion组件中没有静态函数的概念,您总是从GetObject("component",...)获得完全构造的实例.(对于刚刚在第一次使用之前构建的Java对象,如果您忘记/不手动执行,则不是这样.)
我可以取出init方法中的代码并删除init方法,然后将代码粘贴到组件的头部,它是否与init构造函数具有相同的效果?
是的,只要init()方法没有采用任何参数,就没有区别.
但是,有一个名为init()的方法返回组件实例("this")是一种惯例.即使它除了" return this;" 之外什么都不做.我会保持一致,并为每个组件添加一个,即使它不是绝对必要的.