Abstract class and Interface in php play very important role in oop. In this section we will discuss following point

  1. What is abstract classes.
  2. What is interface
  3. How to implement abstract classes in php
  4. How to implement interface in php
  5. Different between abstract classes and interface.

What is abstract Classes

As from name it seem like something that is hidden. Yes nature of the abstract classes are same. Abstract classes are those classes which can not be directly initialized. Or in other word we can say that you can not create object of abstract classes. Abstract classes always created for inheritance purpose. You can only inherit abstract class in your child class. Lots of people say that in abstract class at least your one method should be abstract. Abstract method are the method which is only defined but declared. This is not true definition as per my assumption. But your any class has at least one method abstract than your class is abstract class.

Usually abstract class are also known as base class. We call it base class because abstract class are not the class which is available directly for creating object. It can only act as parent class of any normal class. You can use abstract class in class hierarchy. Mean one abstract class can inherit another abstract class also.

Abstract classes in PHP

Abstract classes in php are simillar like other oop languages. You can create abstract classes in php using abstract keyword. Once you will make any class abstract in php you can not create object of that class.
abstract class abc
{
public function xyz()
{
return 1;
}
}
$a = new abc();//this will throw error in php

above code will throw error in php.

Abstract classes in php are only for inheriting in other class.
abstract class testParent
{
public function abc()
{
//body of your funciton
}
}
class testChild extends testParent
{
public function xyz()
{
//body of your function
}
}
$a = new testChild();

In above example you are creating of testChild Class. TestChild class is inheriting testParent abstract class. So your abstract class is only available for inheritance. Main motive of creating abstract classes in php is to apply restriction of direct initialization or object creation.

Implementation of abstract method

As we know that abstract functions are those functions of abstract class which is only defined. It will be declared in your child class. You can create any method abstract using keyword abstract. You can only create abstract method either in abstract class or interface. Following is example of the abstract method implementation:

abstract class abc
{
abstract protected function f1($a , $b);
}
class xyz extends abc
{
protected function f1($name , $address)
{
echo "$name , $address";
}
}
$a = new xyz();

In class abc we have defined an abstract function f1. Now when we have inherited class abc then declared function f1. If you have an abstract method in your abstract class then once you inherit your abstract class then it is necessary to declare your abstract method. If you will not declare your abstract method then PHP will throw error in that case.

You can declare your abstract method in child class with the same visibility or less restricted visibility.

abstract class parentTest
{
abstract protected function f1();
abstract public function f2();
//abstract private function f3(); //this will trhow error
}
class childTest
{
public function f1()
{
//body of your function
}
public function f2()
{
//body of your function
}
protected function f3()
{
//body of your function
}
}
$a = new childTest();

In above code you can see that you have declare 3 function in abstract class. But private declaration of the abstract method will always throw error. Because private method is availabe only in the same class context. But in case of f1. This is protected. Now in child class we have defined it as public because public is less restricted than protected. And for function f2 which is already public so we have defined it as public in our child class. We have defined it public because no any visibility is less restricted than public.

What is Interface ?

Interface in oop enforce definition of some set of method in the class. By implementing interface you are forcing any class to must declaring some specific set of methods in oop. For example if you are creating class to render HTML element then it is necessary to set id and name of your html tag. So in this case you will create interface for that class and define method like setID and setName. So whenever someone will create any class to render HTML tag and implemented your interface then he must need to define setId and setName method in their class. In other word you can say that by help of interface you can set some definition of your object. Interface is very useful if you are creating architecture of any oop base application. Inter

Interface in PHP

Interface in php can be implemented like other oop lanugage. You can create interface in php using keyword interface. By implementation of interface in php class you are specifying set of the method which classes must implement.

You can create interface in php using interface keyword. Rest of the things are typically identical to classes. Following is very small example of interface in php.
interface abc
{
public function xyz($b);
}

So in above code you are creating interface with name abc. Interface abc has function xyz. Whenever you will implement abc interface in your class then you have to create method with name xyz. If you will not create function xyz then it will throw error.

You can implement your interface in your class using implements keyword. Let us implement our interface abc in our class
class test implements abc
{
public function xyz($b)
{
//your function body
}
}

You can only define method in interface with public accessibility. If you will use other than public visibility in interface then it will throw error. Also while defining method in your interface do not use abstract keyword in your methods.

You can also extend interface like class. You can extend interface in php using extends keyword.
interface template1
{
public function f1();
}
interface template2 extends template1
{
public function f2();
}
class abc implements template2
{
public function f1()
{
//Your function body
}
public function f2()
{
//your function body
}
}

So here template2 has all property of tempate2. So whenever you will implement template2 in your class, you have to create function of both interfaces.

You can also extend multiple interface in one interface in php.
interface template1
{
public function f1();
}
interface template2
{
public function f2();
}
interface template3 extends template1, template2
{
public function f3();
}
class test implements template3
{
public function f1()
{
//your function body
}
public function f2()
{
//your function body
}
public function f3()
{
//your function body
}
}

You can also implement more than one interface in php class.
interface template1
{
public function f1();
}
interface template2
{
public function f2();
}
class test implments template1, template2
{
public function f1()
{
//your function body
}
public function f2()
{
//your function body
}
}

You can not implement 2 interfaces if both share function with same name. It will throw error.

Your function parameter in class must be identical to the parameter in the interface signature. Following is example some example
interface template1
{
public function f1($a)
}
class test implements template1
{
public function f1($a)
{
echo $a;
}
}

Above will work. But following example will not work:
interface template1
{
public function f1($a)
}
class test implements template1
{
public function f1()
{
echo $a;
}
}

But it is not necessary to use the same name of the variable. Like $a. You can also use any name. For example:
interface template1
{
public function f1($a)
}
class test implements template1
{
public function f1($name)
{
echo $name;
}
}

If you are using default argument then you can change your value of the argument. For example
interface template1
{
public function f1($a = 20)
}
class test implements template1
{
public function f1($name  = "ankur")
{
echo $name;
}
}

In above section we have discussed interfaces and abstract classes in php. Both are almost doing same things but has some difference.

Differences between abstract class and interface in PHP

Following are some main difference between abstract classes and interface in php

  1. In abstract classes this is not necessary that every method should be abstract. But in interface every method is abstract.
  2. Multiple and multilevel both type of inheritance is possible in interface. But single and multilevel inheritance is possible in abstract classes.
  3. Method of php interface must be public only. Method in abstract class in php could be public or protected both.
  4. In abstract class you can define as well as declare methods. But in interface you can only defined your methods.

For more information about abstract classes and Interface in PHP you can read:
http://en.wikipedia.org/wiki/Interface_%28computing%29
http://php.net/manual/en/language.oop5.interfaces.php
http://php.net/manual/en/language.oop5.abstract.php

Next >> Overloading and Overriding in PHP

 

Tagged with:
 

39 Responses to Abstract Classes and Interface in PHP

  1. Ab says:

    Why does every tutorial leave out this question

    If i have 3 classes of functionality – and a 4th class needs the functionality from the 3 other classes (class: Accounts, Logging, Permissions and the 4th class needs all 3 – how does one use interfaces to get to the code that already exists)

  2. sujoy paul says:

    GOOD TUTORIAL

  3. Manoj Sharma says:

    Real nice tutorial

  4. Momo says:

    Thanks for your time and effort…. nicely explained , (just few ENGLISH mistakes here and there… :)

  5. alert('I am logged in now'); says:

    Why Method of php interface is only limited to public?

    • giftvincy says:

      PHP classes implement interface instead of inheriting it. Since protected is used for limiting access to the functions/properties of classes to its sub classes, public modifier is used.

  6. best tutorial i ever seen…..about interface and abstact class…..thank you buddy….

  7. Great tutprial.. Thank u … u solved my biggest problem..

  8. passer says:

    Kindly improve your english. The tutorial will be even better. Get someone to proofread it before posting.

  9. passer says:

    Also, you seem to have misunderstood the meaning of ‘definition’ and ‘declaration’, you are swapping its meaning. In abstract classes you ‘declare’ a method not ‘define’ it. Kindly get it corrected because you are unknowingly affecting other people’s understanding of this concepts.

  10. Ashok says:

    Very nicely explained. Lot of clarity…. Thank you :)

  11. Very nice tutorial. Thanks to you

  12. Alex says:

    Good tutorial! but it made conflict in the terms between defining and declaring everywhere!!!

  13. Lior says:

    Really easy to understand tutorial … Gonna use it as a reference for PHP OOP.

    Thanks

  14. Alex says:

    Those who follow this tutorial should be aware of the term ‘declare’ and ‘define’ being used by him here. This tutorial misplaced both!!!! otherwise it is good!

  15. Naveen says:

    Thanks for your nice explanation.

  16. Julhas says:

    Very useful tutorials………..Thanks.

  17. ahmmad says:

    thank you very much .. i read this , and i undrstand it

  18. amit bindal says:

    you are swapping the meaning of defining and declaring…..please correct this mistake….

    defining means body of a function or method…
    like function add(){
    //code here
    }
    declaring means only method name like function add();

  19. Shashi narAyan(shashi baba) says:

    ReAly nice for every one…

  20. sunil says:

    a very us full tutorial

  21. Mike says:

    Your tutorial is the best I have ever come across on php oop. You are simply the best! cheers!

  22. Mike says:

    How can i create HTML form with oop pls?

  23. rahul says:

    nice tutorial…

  24. Thanga says:

    Really nice tutorial,
    i understood both abstract classes and interface, bookmarked this tutorial for my further references.
    many thanks to author of this article

  25. apbp says:

    nice tutorial. thanks lot

  26. reetesh says:

    worth reading

  27. Din says:

    Thanks Ankur

  28. loura says:

    best tutorial i ever seen about interface and abstact class
    …..thank you

  29. NIki says:

    Sahi hai Guru per Example Explain it in brief .:) nice work… keep it up.

  30. Vidhya Shekar says:

    Well explained.. Thank you:)

  31. moht says:

    your texting is quite good but i doubt about your examples because it doesnt prove me when I should use interfaces. I could easy “translate” your interface examples to class’ics. Your examples are more about how to use interfaces as alters to classes. Its like you would say that todays phones are used for sms and calling and you can tap screen to get letter or swap phone for reactions :) You should mention that interfaces are used for objects/classes (especialy, diferent types like Human and, e.x., Animal) communication and when several diferent (type) classes have same functions like Plane ar Bird can fly.

  32. anand kumar says:

    i think in case of abstract class we only declare functions in it , and defined it in child class.
    but here u have mentioned wrong

  33. Mike says:

    You need indentation in your examples for readability.

Leave a Reply