The Difference Between Abstract Class and Interface in PHP


Before diving deep into the difference between abstract class and interface, you must understand one basic thing: these are two completely different classes that cannot be used as an alternative to one another.
Interface classes completely empty the shells while expecting child classes to implement everything for them. Abstract classes not only contain the common piece of information between the shells inside but also expect the child classes within to fill in the gaps.
Let us dive in a bit deeper to actually understand the difference minutely.
If you want to read about PHP Array questions then you can visit here. This will help you crack your PHP interviews.

Interface Class

As we already know, an interface is actually defined by an interface keyword where all the methods are abstract. In addition to this, all the methods declared in this type of class must be declared in public which reflects the true nature of an interface.
Let's help to demonstrate that with an example:
  1. interface Logger {  
  2.     public  
  3.     function execute();  
  4. }  
As you can see above, in the interface, the method body is not defined. Only the name and the parameters are being defined. Now, let's move on to the abstract class.

Abstract Class

In PHP, an abstract class is one being partially implemented by any developer. It might contain at least one abstract method which is basically a method without any written code. It just contains the name and the parameters and has been marked as “abstract”.
By definition, an abstract class is simply a function definition whose purpose is to serve the programmer by telling them the method in question must be implemented in a child class.
Here is an example to demonstrate the abstract class:
  1. abstract class AbstractClass {  
  2.     abstract protected  
  3.     function getValue();  
  4.     public  
  5.     function printOut() {  
  6.         print $this - > getValue().  
  7.         "\n";  
  8.     }  
  9. }  
Now that you have been acquainted with what is an abstract an interface class, its time to delve into their differences, step by step.
Here’s a table depicting the difference between abstract and interface class in PHP.
Interface Class
Abstract Class
Interface class supports multiple inheritance feature
Abstract class does not support multiple inheritances.
This does not contain a data member.
Abstract class does contain a data member.
The interface does not allow containers.
The abstract class supports containers.
An interface class only contains incomplete members which refer to the signature of the member.
Abstract class contains both incomplete(i.e. abstract) and complete members.
Since everything is assumed to be public, an interface class does not have access modifiers by default.
An abstract class can contain access modifiers within subs, functions, and properties.
Any member of an interface cannot be static.
Only a complete member of the abstract class can be static.


Now that you have learned abstract class and interface differences, it will be much easier to implement them on your project.