當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();