php依赖注入

白俊遥博客

当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合。这个时候解决方式是,A类应该去依赖B类的接口,把具体的类的实例化交给外部。

<?php
 
/**
 * 为了约束我们先定义一个消息接口
 * Interface Message
 */
interface  Message{
 
  public function seed();
}
 
/**
 * 有一个发送邮件的类
 * Class SeedEmail
 */
class SeedEmail implements Message
{
 
    public function seed()
    {
        return  'seed email';
        // TODO: Implement seed() method.
    }
 
}
 
/** 
 *新增一个发送短信的类
 * Class SeedSMS
 */
class SeedSMS implements Message
{
    public function seed()
    {
        return 'seed sms';
        // TODO: Implement seed() method.
    }
 
 
}
/*
 * 订单产生的时候 需要发送消息
 */
class Order{
 
    protected $messager = '';
 
    function __construct(Message $message)
    {
        $this->messager = $message;
    }
    public function seed_msg()
    {
        return $this->messager->seed();
    }
}
//我们需要发送邮件的时候
$message = new SeedEmail();
//将邮件发送对象作为参数传递给Order
$Order = new Order($message);
$Order->seed_msg();
 
 
//我们需要发送短信的时候
$message = new SeedSMS();
$Order = new Order($message);
$Order->seed_msg();
 
构造方法注入
https://learnku.com/laravel/t/26721
https://www.cnblogs.com/phpper/p/7781119.html
< ?phpclass C {
    public
    function doSomething() {
        echo __METHOD__,
        '我是C类|';
    }
}
class B {
    private $c;
    public
    function __construct(C $c) {
        $this - >c = $c;
    }
    public
    function doSomething() {
        $this - >c - >doSomething();
        echo __METHOD__,
        '我是B类|';
    }
}
class A {
    private $b;
    public
    function __construct(B $b) {
        $this - >b = $b;
    }
    public
    function doSomething() {
        $this - >b - >doSomething();
        echo __METHOD__,
        '我是A类|';;
    }
}
$class = new A(new B(new C()));
$class - >doSomething(); // C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|



白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论