PHP Interfaces Quickstart
PHP interfaces are still quite new to most. Below is a simple demonstration of their usefulness. I think I’d seen this within one of the many fantastic laravel books.
<?php interface BillerInterface { public function bill(array $user, $amount); } interface BillingNotifierInterface { public function notify(array $user, $amount); }class NotifyByEmail implements BillingNotifierInterface {
public function notify(array $user, $amount)
{
echo “Send email for “.$user[“name”].” of $amount”.PHP_EOL;
}
}class NotifyByMessage implements BillingNotifierInterface {
public function notify(array $user, $amount)
{
echo “Display message for “.$user[“name”].” of $amount”.PHP_EOL;
}
}class NotifyBySMS implements BillingNotifierInterface {
public function notify(array $user, $amount)
{
echo “Send SMS for “.$user[“name”].” of $amount”.PHP_EOL;
}
}class StripeBiller implements BillerInterface {
public function __construct(BillingNotifierInterface $notifier)
{
$this->notifier = $notifier;
}public function bill(array $user, $amount) { // Bill the user via Stripe... echo "Bill via Stripe".PHP_EOL; $this->notifier->notify($user, $amount); }
}
class PaypalBiller implements BillerInterface {
public function __construct(BillingNotifierInterface $notifier)
{
$this->notifier = $notifier;
}public function bill(array $user, $amount) { echo "Bill via Paypal".PHP_EOL; $this->notifier->notify($user, $amount); }
}
class EPDQBiller implements BillerInterface {
public function __construct(BillingNotifierInterface $notifier)
{
$this->notifier = $notifier;
}public function bill(array $user, $amount) { echo "Bill via ePDQ".PHP_EOL; $this->notifier->notify($user, $amount); }
}
$newBill = new StripeBiller(new NotifyBySMS);
$newBill->bill(
array(
“name” => “Scott Wilcox”
),
“123.89”
);
$newBill = new PaypalBiller(new NotifyByMessage);
$newBill->bill(
array(
“name” => “Scott Wilcox”
),
“123.89”
);
$newBill = new EPDQBiller(new NotifyByEmail);
$newBill->bill(
array(
“name” => “Scott Wilcox”
),
“123.89”
);