当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合。这个时候解决方式是,A类应该去依赖B类的接口,把具体的类的实例化交给外部。
<?php
/**
* 依赖注入模式
*/
interface Message
{
public function send();
}
class SendEmail implements Message
{
public function send()
{
// TODO: Implement send() method.
echo 'send email','<br/>';
}
}
class SendSMS implements Message
{
public function send()
{
// TODO: Implement send() method.
echo 'send sms','<br/>';
}
}
class User
{
private $server = null;
public function __construct(Message $message)
{
$this->server = $message;
}
public function sendMsg()
{
return $this->server->send();
}
}
// 发送邮件
$message = new SendEmail();
$user = new User($message);
$user->sendMsg();
// 发送短信
$message = new SendSMS();
$user = new User($message);
$user->sendMsg();
-