Abstract Classes and Interface in PHP March 24
Abstract Classes and Interface in PHP March 24
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.
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.
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.
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 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