Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions 5-dependency-inversion-principle.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,25 @@ interface Mailer
public function send();
}

// Concrete implementation of Mailer using SMTP
class SmtpMailer implements Mailer
{
public function send()
{

echo 'send message from SMTP mailer';
}
}

// Concrete implementation of Mailer using SendGrid
class SendGridMailer implements Mailer
{
public function send()
{

echo 'send message from SendGrid mailer';
}
}

// High-level module that depends on the Mailer abstraction
class SendWelcomeMessage
{
private $mailer;
Expand All @@ -45,4 +48,18 @@ public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}

public function sendWelcome()
{
$this->mailer->send();
}
}

// Usage example
$smtpMailer = new SmtpMailer();
$welcomeMessage = new SendWelcomeMessage($smtpMailer);
$welcomeMessage->sendWelcome(); // Outputs: send message from SMTP mailer

$sendGridMailer = new SendGridMailer();
$welcomeMessage = new SendWelcomeMessage($sendGridMailer);
$welcomeMessage->sendWelcome(); // Outputs: send message from SendGrid mailer