Interfaces

Writing code contracts

The word interface is a confusing term because it is used for so many different concepts. Most often, we use it to describe the appearance of an app and how a user interacts with it. However, in PHP, an interface is a special construct that acts as a contract for classes. An interface defines what methods a class should have.

<?php

interface Chair
{
    public function setColor($color);
    public function setLegs($number);
}

To use an interface with a class, you use the implements keyword after the class name. Now, the Recliner class must have a setColor method and a setLegs method. If you do not create the required methods on the class, PHP will throw an error.

class Recliner implements Chair
{
    private $color;
    private $legs;

    public function setColor($color)
    {
        $this->color = $color;
    }

    public function setLegs($number)
    {
        $this->legs = $number;
    }
}

Interfaces are helpful when you are using code created by someone else. For example, another developer may have created code that manages online payments, but they want to give you the ability to create your own payment class that works with their code. In that case, the developer creates an interface with all the required methods they need to charge a payment. The interface becomes a contract between your code and the other developer’s code to work a certain way.

interface Payment
{
    public function charge($amount);
}

class CreditCard implements Payment
{
    public function charge($amount)
    {
        // contacts a credit card payment provider...
    }
}

Since CreditCard implements Payment, a developer can check that it implements Payment and then use the charge method knowing the function exists on the class.

$creditCard = new CreditCard();
if ($creditCard instanceof Payment) {
    $creditCard->charge(25);
}