2016-05-31 25 views
0

被覆寫按照Silverstripe文檔:Silverstripe查找噴射器中的類,使類可以通過依賴注入

使用create()方法提供chainability,可以增添優雅和簡潔到您的代碼,例如球員::創建() - >寫()。但更重要的是,它將在Injector中查找類,以便類可以通過依賴注入來重寫。

有人可以解釋「它會在注入器中查找類,以便該類可以被依賴注入重寫」部分嗎?

回答

1

當您的播放器類依賴於AnotherClass它是AnotherClass的一個實例傳遞給玩家很好的做法。你可以閱讀更多關於此這裏:What is dependency injection?

SilverStripe在解決方案Dependecy注射構建:噴油器類。請參閱https://docs.silverstripe.org/en/3.3/developer_guides/extending/injector/

因此,當您撥打Player::create(); SilverStripe將查找使用的正確類(默認爲Player類,但可以用配置文件覆蓋),創建一個新實例,注入其依賴關係並將其返回給您。

如果您是SilverStripe的新手,您可能會忽略所有這些。

4

我想你可能是指這樣的:

Injector: 
    MyClass1: 
    class: MyClass2 

以上陽明配置片斷會告訴噴油器(通過其幾乎所有的SS」對象實例化)使用MyClass2而不是MyClass1MyClass1::create()被調用。

+0

這是否適用於那些通過'MyClass1的::創建()',而不是通過'新MyClass1'儘可能多的框架代碼仍然沒有創建的類實例化的所有類? –

+0

正確。 '新的MyClass()'是普通的舊PHP。 「劫持」這個語法是非常困難的,因此SS會提供'Injector's' create()'方法。僅供參考,還有'createWithArgs()'也有很多人錯過。 – theruss