仮想タイプを理解する別の方法- 
\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が、どこかでステートメントが。