Interface are definitions of the public APIs that classes (implementing an interface) must implement. It is also known as contracts as an interface allows to specify a list of methods that a class must implement. Interface definition is similar to the class definition, just by changing the keyword class to interface.
Example:
php
<?phpinterface man { // List of public methods} |
Interfaces can contain methods and/or constants, but no attributes. Interface constants have the same restrictions as class constants. Interface methods are implicitly abstract.
Example:
php
<?phpinterface IMyInterface { const INTERFACE_CONST_1 = 1; const INTERFACE_CONST_2 = 'a string'; public function method_1(); public function method_2();}?> |
Any class that needs to implement an interface must do using the implements keyword. A single class can implement more than one interface at a time.
php
// Function to Implements more than one // interface by single class. class MyClass implements IMyInterface { public function method_1() { // method_1 implementation } public function method_2() { // method_2 implementation }} |
Interesting Points :
- A class cannot implement two interfaces that have the same method name because it would end up with the method ambiguity.
- Like classes, it is possible to establish an inheritance relationship between interfaces by using the same keyword “extends”.
Example:
php
interface Foo {}interface Bar {}interface Bass extends Foo, Bar {} |
Below is a complete example that shows how interfaces work.
Example:
php
<?php// PHP program to Implement interface. // Define a new Interface for all 'shapes' // to inheritinterface Shape { // Define the methods required for // classes to implement public function getColor(); public function setColor($color); // Interfaces can't define common // functions so we'll just define a // method for all implementations to // define public function describe();}// Define a new 'Triangle' class that // inherits from the 'Shape' interface class Triangle implements Shape { private $color = null; // Define the required methods defined // in the abstractclass 'Shape' public function getColor() { return $this->color; } public function setColor($color) { $this->color = $color; } public function describe() { return sprintf("neveropen %s %s\n", $this->getColor(), get_class($this)); } }$triangle = new Triangle();// Set the color$triangle->setColor('green');// Print out the value of the describe common // method provided by the abstract class will// print out "I am an Orange Triangle"print $triangle->describe();?> |
Output:
neveropen green Triangle
Importance of using Interfaces:
- Interface provide a flexible base/root structure that you don’t get with classes.
- By implementing interface the caller of the object need to care only about the object’s interface not implementations of the object’s methods.
- Interface allows unrelated classes to implement the same set of methods regardless of their positions in the class inheritance hierarchy.
- Interface enables you to model multiple inheritance.
