Creating interface in php

Интерфейсы объектов

Интерфейсы объектов позволяют создавать код, который указывает, какие методы должен реализовать класс, без необходимости описывания их функционала.

Интерфейсы объявляются так же, как и обычные классы, но с использованием ключевого слова interface. Тела методов интерфейсов должны быть пустыми.

Все методы, определенные в интерфейсы должны быть публичными, что следует из самой природы интерфейса.

implements

Для реализации интерфейса используется оператор implements. Класс должен реализовать все методы, описанные в интерфейсе; иначе произойдет фатальная ошибка. При желании классы могут реализовывать более одного интерфейса за раз, реализуемые интерфейсы должны разделяться запятой.

Замечание:

Класс не может реализовать два интерфейса, содержащих одноименную функцию, так как это повлечет за собой неоднозначность.

Замечание:

Интерфейсы могут быть унаследованы друг от друга, так же как и классы, с помощью оператора extends.

Замечание:

Сигнатуры методов в классе, реализующем интерфейс, должны точно совпадать с сигнатурами, используемыми в интерфейсе, в противном случае будет вызвана фатальная ошибка.

Константы (Constants)

Интерфейсы могут содержать константы. Константы интерфейсов работают точно так же, как и константы классов, за исключением того, что они не могут быть перекрыты наследующим классом или интерфейсом.

Примеры

Пример #1 Пример интерфейса

// Объявим интерфейс ‘iTemplate’
interface iTemplate
public function setVariable ( $name , $var );
public function getHtml ( $template );
>

// Реализуем интерфейс
// Это сработает нормально
class Template implements iTemplate
private $vars = array();

public function setVariable ( $name , $var )
$this -> vars [ $name ] = $var ;
>

public function getHtml ( $template )
foreach( $this -> vars as $name => $value ) $template = str_replace ( » , $value , $template );
>

// Это не будет работать
// Fatal error: Class BadTemplate contains 1 abstract methods
// and must therefore be declared abstract (iTemplate::getHtml)
// (Фатальная ошибка: Класс BadTemplate содержит 1 абстрактный метод
// и поэтому должнен быть объявлен абстрактным (iTemplate::getHtml))
class BadTemplate implements iTemplate
private $vars = array();

public function setVariable ( $name , $var )
$this -> vars [ $name ] = $var ;
>
>
?>

Пример #2 Расширяемые интерфейсы

interface b extends a
public function baz ( Baz $baz );
>

// Это сработает
class c implements b
public function foo ()
>

Читайте также:  Java short int char

public function baz ( Baz $baz )
>
>

// Это не сработает и выдаст фатальную ошибку
class d implements b
public function foo ()
>

Пример #3 Множественное наследование интерфейсов

interface b
public function bar ();
>

interface c extends a , b
public function baz ();
>

class d implements c
public function foo ()
>

Пример #4 Интерфейсы с константами

interface a
const b = ‘Константа интерфейса’ ;
>

// Выведет: Константа интерфейса
echo a :: b ;

// Вот это, однако, не будет работать, так как
// константы перекрывать нельзя.
class b implements a
const b = ‘Class constant’ ;
>
?>

Интерфейс, совместно с контролем типов, предоставляет отличный способ проверки того, что определенный объект содержит определенный набор методов. Смотрите также оператор instanceof и контроль типов.

Источник

PHP OOP — Interfaces

Interfaces allow you to specify what methods a class should implement.

Interfaces make it easy to use a variety of different classes in the same way. When one or more classes use the same interface, it is referred to as «polymorphism».

Interfaces are declared with the interface keyword:

Syntax

interface InterfaceName public function someMethod1();
public function someMethod2($name, $color);
public function someMethod3() : string;
>
?>

PHP — Interfaces vs. Abstract Classes

Interface are similar to abstract classes. The difference between interfaces and abstract classes are:

  • Interfaces cannot have properties, while abstract classes can
  • All interface methods must be public, while abstract class methods is public or protected
  • All methods in an interface are abstract, so they cannot be implemented in code and the abstract keyword is not necessary
  • Classes can implement an interface while inheriting from another class at the same time

PHP — Using Interfaces

To implement an interface, a class must use the implements keyword.

A class that implements an interface must implement all of the interface’s methods.

Example

interface Animal public function makeSound();
>

class Cat implements Animal public function makeSound() echo «Meow»;
>
>

$animal = new Cat();
$animal->makeSound();
?>

From the example above, let’s say that we would like to write software which manages a group of animals. There are actions that all of the animals can do, but each animal does it in its own way.

Using interfaces, we can write some code which can work for all of the animals even if each animal behaves differently:

Example

// Interface definition
interface Animal public function makeSound();
>

// Class definitions
class Cat implements Animal public function makeSound() echo » Meow «;
>
>

Читайте также:  скрыть блок средствами HTML , CSS, JS и Bootstrap на BlogGood.ru

class Dog implements Animal public function makeSound() echo » Bark «;
>
>

class Mouse implements Animal public function makeSound() echo » Squeak «;
>
>

// Create a list of animals
$cat = new Cat();
$dog = new Dog();
$mouse = new Mouse();
$animals = array($cat, $dog, $mouse);

// Tell the animals to make a sound
foreach($animals as $animal) $animal->makeSound();
>
?>

Example Explained

Cat, Dog and Mouse are all classes that implement the Animal interface, which means that all of them are able to make a sound using the makeSound() method. Because of this, we can loop through all of the animals and tell them to make a sound even if we don’t know what type of animal each one is.

Since the interface does not tell the classes how to implement the method, each animal can make a sound in its own way.

Источник

Интерфейсы в PHP

В этом уроке мы узнаем о другой форме композиции в PHP — интерфейсах. Интерфейсы похожи на абстрактные классы и позволяют нам создавать слабосвязанные приложения.

Что такое интерфейс?

Интерфейсы напоминают абстрактные классы тем, что они включают абстрактные методы, которые должны быть определены в классах, наследуемых от интерфейса.

Интерфейсы позволяют легко использовать различные классы одинаковым образом. Когда один или несколько классов используют один и тот же интерфейс, это называется полиморфизмом.

Интерфейсы целесообразно создавать тогда, когда есть общая задача и несколько вариантов ее решения, применяемых в зависимости от ситуации.

Интерфейсы могут содержать методы и / или константы, но не атрибуты. Интерфейсные константы имеют те же ограничения, что и константы класса. Методы интерфейса неявно абстрактны. Интерфейсы определяются с помощью ключевого слова interface , за которым следует имя интерфейса:

Пример

Все методы в интерфейсе являются абстрактными, поэтому они не могут быть реализованы в коде, и ключевое слово abstract не требуется.

В отличие от методов абстрактного класса, которые могут быть публичными или защищенными, все методы интерфейса должны быть только публичными:

Пример

Примечание: Интерфейсы не должны объявлять конструкторы или деструкторы, поскольку это детали реализации на уровне класса.

Как реализовать интерфейс?

Чтобы реализовать интерфейс, нужно создать класс с помощью ключевого слова implements .

Пример

 class Child implements interfaceName < // определяет методы интерфейса и может иметь собственный код >?>

В приведенном ниже примере мы создадим интерфейс для классов, управляющих автомобилями, который передает все свои методы setModel() и getModel() классам, реализующим интерфейс:

Пример

Интерфейсы, как и абстрактные классы, включают абстрактные методы и константы. Однако, в отличие от абстрактных классов, интерфейсы могут иметь только публичные методы и не могут иметь переменных.

Читайте также:  Программировать в браузере на питоне

Классы, реализующие интерфейсы, должны определять все методы, которые они наследуют от интерфейсов, включая все параметры. В следующем примере в конкретном классе с именем miniCar добавим код ко всем абстрактным методам:

Пример

 class miniCar implements Car < private $model; public function setModel($name) < $this ->model = $name; > public function getModel() < return $this ->model; > > $car = new miniCar(); $car -> setModel('Mercedes Benz'); echo $car -> getModel(); ?>

Результат выполнения кода:

Реализация нескольких интерфейсов

Мы можем реализовать несколько интерфейсов в одном классе и таким образом обойти закон, запрещающий наследование от более чем одного родительского класса.

В следующем примере класс MyClass реализовывает два интерфейса, разделенных запятыми в объявлении. При этом мы должны объявить все абстрактные методы внутри созданного класса:

Пример

 Interface MyInterface2 < public function myMethod2(); >class MyClass implements MyInterface1, MyInterface2 < public function myMethod1() < echo "Привет "; >public function myMethod2() < echo "Мир!"; >> $obj = new MyClass(); $obj -> myMethod1(); $obj -> myMethod2(); ?>

Результат выполнения кода:

Как расширить класс и реализовать интерфейс?

Класс может расширять класс, а также реализовывать один или несколько интерфейсов:

Пример

 class ParentClass < public $name; public function __construct($name) < $this ->name = $name; > > class ChildClass extends ParentClass implements MyInterface < function write() < echo $this ->name; > > $child = new ChildClass('Max Maxsimov'); $child -> write(); ?>

Результат выполнения кода:

Примечание: Вы можете расширить только один класс, в то же время вы можете реализовать несколько интерфейсов.

Расширение интерфейсов

Интерфейсы также могут расширять интерфейсы:

Пример

 Interface MyInterface2 extends MyInterface1 < public function myMethod2(); >class MyClass1 implements MyInterface1 < # нужен только этот метод public function myMethod1() <>> class MyClass2 implements MyInterface2 < # должны быть объявлены как myMethod1, так и myMethod2 public function myMethod1() <>public function myMethod2() <> > ?>

Разница между абстрактным классом и интерфейсом

В таблице приведены несколько важных различий между абстрактным классом и интерфейсом:

интерфейс абстрактный класс
код — абстрактные методы
— константы
— абстрактные методы
— константы
— конкретные методы
— конкретные переменные
модификаторы доступа — публичные — публичные
— защищенные
количество родителей Один и тот же класс может реализовывать более 1 интерфейса Дочерний класс может наследовать только от 1 абстрактного класса

Заключение

В этом уроке мы научились создавать и реализовывать интерфейсы, а также узнали о различиях между абстрактными классами и интерфейсами. Щелкните здесь, чтобы закрепить полученные знания на практике.

Источник

Оцените статью