当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类|
坚持学习,成就自我