一、对象的实例化(di.xml文件)
magento2中,类是你自定义的一个php文件(类似java),对象就是类的实例化。
etc目录下的di.xml文件用于实例化配置,每一个<preference>节点代表一个实例化配置,实例化有两种,继承和接口实现。
--for属性:源类
--type属性:实际实例化类
(1)类继承extends
下面的代码表示Messenger类中,构造器已经注入Messenger2类或其父类,每当请求对象管理器实例化 Messenger 对象时,对象管理器实际上应该实例化 Messenger2 对象。
<preference
for="Pulsestorm\TutorialObjectPreference\Model\Messenger"
type="Pulsestorm\TutorialObjectPreference\Model\Messenger2" />
附messenger类:
<?php>
public function __construct(Messenger $messenger, ObjectManagerInterface $om)
{
$this->object_manager = $om;
$this->messenger = $messenger;
return parent::__construct();
}
Messenger2类:
<?php
namespace Pulsestorm\TutorialObjectPreference\Model;
class Messenger2 extends Messenger
{
public function getMessage()
{
return 'Injection? We don\'t need no stinking injection!';
}
}
(2)接口实现Interface
下面的代码表示MessageHolderInterface接口类有对应的实现类English,每当请求对象管理器实例化 MessageHolderInterface接口时,对象管理器实际上应该实例化其实现类English。
<!-- File: app/code/Pulsestorm/TutorialObjectPreference/etc/di.xml -->
<preference
for="Pulsestorm\TutorialObjectPreference\Model\MessageHolderInterface"
type="Pulsestorm\TutorialObjectPreference\Model\English" />
附MessageHolderInterface接口类:
<?php
namespace Pulsestorm\TutorialObjectPreference\Model;
interface MessageHolderInterface
{
public function getHelloMessage();
}
实现类English:
<?php>
class English implements MessageHolderInterface{
public function getHelloMessage()
{
return 'Hello!';
}
}