【发布时间】:2014-05-03 09:38:24
【问题描述】:
我一直在尝试查找有关通过静态方法和new 关键字实例化表单字段之间差异的一些信息。有人能告诉我new MyFormField 和MyFormField::create() esp 之间的实际影响和限制是什么吗?关于 SilverStripe
【问题讨论】:
标签: static subclass instantiation silverstripe
我一直在尝试查找有关通过静态方法和new 关键字实例化表单字段之间差异的一些信息。有人能告诉我new MyFormField 和MyFormField::create() esp 之间的实际影响和限制是什么吗?关于 SilverStripe
【问题讨论】:
标签: static subclass instantiation silverstripe
使用create 工厂方法将检查重载(通过Object::useCustomClass() 设置)并在这种情况下返回自定义类的实例。
此方法首先用于强类重载(单例和 DB 交互),然后是自定义类重载。如果发现过载,则 返回 this 的实例而不是原始类。至 重载一个类,使用 Object::useCustomClass()
因此,使用 create 方法而不是自己实例化 Object 可以在不更改代码的情况下重载使用的类。
见
http://api.silverstripe.org/3.1/class-Object.html#_useCustomClass
http://api.silverstripe.org/3.1/class-Object.html#_create
【讨论】:
create 对性能的影响是什么,因为它反过来使用Injector,如果还没有实例,则创建一个实例然后get 有很多额外的代码执行。