Difference between Interface and abstract class – PHP Tutorials

Many of us normally end up with confusion about interface and abstract class, so in this post i am trying to clear it out, and highlighting the usuages.

What is Interface?

Interface is just a interface as the name implies, it just a definition of objects and methods with no body  on it. So its a collection of objects and methods that can be used by other class to perform common function. So its a just a place to specify objects and methods but does not explain you, how it is used or defined.
Its a practice to make clear rules on class.

So in summary, interface doesn’t do any thing, its just a pattern to be follow.

Class can inherit more than one interface.

What is Abstract class?

Abstract class is little more than interface classes, it not only defines the objects / methods  but also explain, what it suppose to do as default.  It may / may not define all the methods so it can leave some of the method to be implement by those who inherits it. Class who inherits it can add more methods / objects, those are not provided by the abstract class unlikly to interface.

Objects of an abstract and interface class cannot be created.

Private methods cannot be define in Abstract class as its cant be used by classes using abstract.

What is the Difference between Abstract Class and Interface

  1. Can inherit only one abstract class but can inherit more than on interface.
  2. Abstract provides complete code but interface is just a pattern to be follow.
  3. Abstract class is faster as it has complete code while interface is just a pattern so more classes are loaded.
  4. If new method is added to abstract class, all class that inheriting might work but if we add method in interface we have to define method in all inherited classes.
  5. Class using abstract classes may / may not follow everything from abstract class and call add more  but interface must be followed.
  6. Class can overwrite the method of abstract class but interface we just follow the same.
  7. Completely non related classes can follow same interface but in abstract this may not be possible.

Example of Abstract Class:

abstract class Member {
    public $fname;
    public $lname;
    public $address;
    public $phone;

    public function addData($fname,$lname,$address,$phone) {
    }

    protected function getName() {
    return $this->fname.' '.$this->lname;
   }
}

Class using Abstract class:

class Employee extends Member {

    public $emp_name;
    public $emp_address;
    public $emp_phone;

    public funtion getFullName() {
        $this->name = $this->$emp_fname;
        $this->lname = $this->$mp_lname;
        echo $this->getName();
}                 
          public function someFunction() {        };
}

In above example, class inheritting abstract class Member 
is only using one method of the class. And also has some extra class on it. 

Example if Interface:

Interface  Member {

    public function addData($fname,$lname,$address,$phone);

}
class Employee implements Member {

    public $emp_name;
    public $emp_address;
    public $emp_phone;

    public funtion addData($fname,$lname,$address,$phone) {
        // code

        }                 }