<?php
/*
* Dependency Injection(依存性の注入)の構成
* メールの送信手段を変更する場合、NewsletterTransfer に渡すクラスを差し替えればいい
* 差し替えを容易にするため&命令統一のためにインターフェイスも定義する
* これにより NewsletterTransfer が安定する
*/
/**************************************************/
// メール送信インターフェイス
interface MailerInterface
{
public function send($body);
}
/**************************************************/
// Sendmailでメール送信
class SendmailMailer implements MailerInterface
{
public function send($body)
{
echo 'Sendmailで送信しました:' . $body . "\n";
}
}
// SMTPでメール送信
class SmtpMailer implements MailerInterface
{
public function send($body)
{
echo 'SMTPで送信しました:' . $body . "\n";
}
}
/**************************************************/
// ニュースレター送信
class NewsletterTransfer
{
protected $mailer;
public function __construct(MailerInterface $mailer)
{
$this->mailer = $mailer;
}
public function send($message)
{
$this->mailer->send($message);
}
}
/**************************************************/
// 送信処理
$newsletter = new NewsletterTransfer(new SendmailMailer());
$newsletter->send('今月のピックアップニュース');