根据 Silverstripe 文档:
使用 create()方法提供了链式,这可以为您的代码增加优雅和简洁,例如 Player::create()->write()。然而,更重要的是,它将在注入器中查找类,以便可以通过依赖注入覆盖该类。
有人可以解释"它将在注入器中查找类,以便可以通过依赖注入覆盖该类"部分吗?
我想你可能指的是这个:
Injector:
MyClass1:
class: MyClass2
上面的 YML 配置片段将告诉 Injector(几乎所有 SS 对象都通过它实例化)在调用 MyClass1::create()
时使用 MyClass2
而不是 MyClass1
。
当您的玩家类依赖于 OtherClass 时,最好将 OtherClass 的实例传递给玩家。您可以在此处阅读有关此内容的更多信息:什么是依赖注入?
SilverStripe有一个内置的依赖注入解决方案:注入器类。请参阅 https://docs.silverstripe.org/en/3.3/developer_guides/extending/injector/
因此,当您调用Player::create();
SilverStripe 将查找要使用的正确类(默认为 Player Class,但可以用配置文件覆盖),创建它的新实例,注入其依赖项并将其返回给您。
如果你是SilverStripe的新手,你可能会忽略所有这些。