What is the point of interfaces in PHP ?

An Interface allows users to create programs specifying the public methods that a class must implement, without involving the complexities and details of how the particular methods are implemented. It is generally referred to as the next level of abstraction. It resembles the abstract methods, resembling the abstract classes. An Interface is defined just like a class is defined but with the class keyword replaced by the interface keyword and the function prototypes. The interface contains no data variables. The interface is helpful in a way that it ensures to maintain a sort of metadata for all the methods a programmer.
In PHP, we can do Object-Oriented Programming. That means we can make use of Object-Oriented concepts like create classes and objects, use inheritance, etc. OOPs contains mainly three different types of inheritance. Which are: Single Inheritance, Multiple Inheritance, and Multi-level Inheritance. Now, PHP supports single and multi-level inheritance. Multiple inheritance is not directly supported in PHP but can be implemented using Interface. So, the main reason for Interfaces in PHP is to implementing Multiple Inheritance.
In multiple inheritance, we can derive a child class from two or more parent classes. Here is how we can implement multiple inheritance in PHP.

We have three different classes as follows:

class Circle {
    public function draw(){
        //
    }
    public function setRadius() {
        //
    }
}

class Square {
    public function draw(){
        //
    }
}

class Rectangle {
    public function draw(){
        //
    }
}

Now as it is shown above, we have the same function in all the three classes draw() and one more function in the class Circle as setRadius(). Now we have three different interfaces created and implemented them in our classes as follows:



interface Shape {
    public function draw();
}

interface Radius {
    public function setRadius();
}

interface Main {
    public function process();
}

class Circle implements Shape, Radius, Main {
    public function draw(){
        echo "Drawing Circle...";
    }
    public function setRadius() {
        echo "Setting Radius...";
    }
    public function process() {
        $this->setRadius();
        $this->draw();
    }
}

class Square implements Shape, Main {
    public function draw(){
        echo "Drawing Square...";
    }
    public function process() {
        $this->draw();
    }
}

class Rectangle implements Shape, Main {
    public function draw(){
        echo "Drawing Rectangle...";
    }
    public function process() {
        $this->draw();
    }
}

As it is shown above, we have implemented more that one interface in our classes. The Shape and Main interfaces are implemented in all the classes but Radius interface is just implemented in Circle class.

Then a fourth class called DrawShape is there as we want to call the process() function in all the classes. The process() function is to call all the functions in that class.

class DrawShape {
    public function newShape(Main $shape) {
        return $shape->process();
    }
}

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
  
interface Shape {
    public function draw();
}
  
interface Radius {
    public function setRadius();
}
  
interface Main {
    public function process();
}
  
class Circle implements Shape, Radius, Main {
      
    public function draw(){
        echo "Drawing Circle...";
        echo "<br>";
    }
  
    public function setRadius() {
        echo "Setting Radius...";
    }
  
    // To call all the functions in this class
    public function process() {
        $this->setRadius();
        $this->draw();
    }
  
}
  
class Square implements Shape, Main {
  
    public function draw(){
        echo "Drawing Square...";
        echo "<br>";
    }
  
    // To call all the functions in this class
    public function process() {
        $this->draw();
    }
  
}
  
class Rectangle implements Shape, Main {
  
    public function draw(){
        echo "Drawing Rectangle...";
        echo "<br>";
    }
  
    // To call all the functions in this class
    public function process() {
        $this->draw();
    }
  
}
  
class DrawShape {
  
    public function newShape(Main $shape) {
        return $shape->process();
    }
      
}
  
// To Draw Circle
$shapeCircle = new Circle();
$drawCircle = new DrawShape();
$drawCircle->newShape($shapeCircle);
  
// To Draw Square
$shapeSquare = new Square();
$drawSquare = new DrawShape();
$drawSquare->newShape($shapeSquare);
  
// To Draw Rectangle
$shapeRectangle = new Rectangle();
$drawSquare = new DrawShape();
$drawSquare->newShape($shapeRectangle);
  
?>

chevron_right


Output:




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.