仮想タイプを理解する別の方法-
\Class1
次のコンストラクタを持つclassを持っているとしましょう-
public function __construct(\Class2 $argOfClass1){...}
そして\Class2
、次のコンストラクタがあります-
public function __construct(\Class3 $argOfClass2){...}
さて、あなたはの種類を変更したい$argOfClass2
から\Class3
と\Class4
、しかしときにのみ\Class2
に使用されます$argOfClass1
。
それを行う「古い」方法は、以下を追加することですdi.xml
-
<type name="Class1">
<arguments>
<argument name="argOfClass1" xsi:type="object">Class5</argument>
</arguments>
</type>
どこ\Class5
次のとおりです。
class \Class5 extends \Class2{
public function __construct(\Class4 $argOfClass2){...}
}
この方法を使用する代わりに、次を追加することにより、仮想タイプを使用して同じことを実現できますdi.xml
。
<virtualType name="Class5" type="Class2">
<arguments>
<argument name="argOfClass2" xsi:type="string">Class4</argument>
</arguments>
</virtualType>
<type name="Class1">
<arguments>
<argument name="argOfClass1" xsi:type="object">Class5</argument>
</arguments>
</type>
ご覧のとおり、仮想タイプを使用すると、の作成作業が節約されますClass5
。
さらに参照するには、Magento2の仮想タイプに関するAlan Stormの記事を読むことをお勧めします-http : //alanstorm.com/magento_2_object_manager_virtual_types/
Magento\Framework\ObjectManager\Config\Mapper\Dom::convert
。ありますswitch
が、どこかでステートメントが。