magento2的对象管理

博客主要介绍了Magento2中对象的实例化,指出类是自定义的PHP文件,对象是类的实例化。etc目录下的di.xml文件用于实例化配置,每个<preference>节点代表一个配置,实例化方式有类继承和接口实现,并给出了相应代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对象的实例化(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!';
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值