Interfețe în PHP
O interfață este o listă de metode publice pe care o clasă TREBUIE să le ofere. Spune ce trebuie să existe, dar nu spune cum funcționează fiecare metodă.
Declari o interfață cu ajutorul cuvântului cheie interface, iar fiecare metodă din ea trebuie să fie public.
O clasă adoptă o interfață cu ajutorul cuvântului cheie implements și, din acel moment, trebuie să implementeze toate metodele interfeței.
În exemplul următor, interfața Animal declară o singură metodă publică, makeSound(). Deoarece Cat și Dog implementează amândouă Animal, fiecare dintre ele trebuie să includă makeSound():
Exemplu
Cat și Dog oferă fiecare un corp propriu pentru makeSound(), ca să respecte interfața Animal:
Ieșire: script PHP
<?php
// Definim interfața
interface Animal {
public function makeSound();
}
// Implementăm interfața într-o clasă
class Cat implements Animal {
public function makeSound() {
echo "Meow";
}
}
// Implementăm interfața într-o altă clasă
class Dog implements Animal {
public function makeSound() {
echo "Woff";
}
}
$cat = new Cat();
$cat->makeSound();
$dog = new Dog();
$dog->makeSound();
?>
Sintaxa unei interfețe
Cum se scrie declarația unei interfețe:
<?php
interface InterfaceName {
public function method1();
public function method2();
}
?>
Implementarea unei interfețe
Cum implementează o clasă o interfață:
<?php
class ClassName implements InterfaceName{
public function method1() {
// some code
}
public function method2(){
// some code
}
}
?>
PHP - Interfețe vs. clase abstracte
Interfețele au multe în comun cu clasele abstracte, dar diferă în câteva privințe:
- O clasă abstractă poate avea proprietăți; o interfață nu poate
- Metodele unei interfețe sunt întotdeauna publice, în timp ce metodele abstracte pot fi publice sau protejate
- Fiecare metodă a unei interfețe este abstractă, deci nu are implementare în cod, și nu trebuie să scrii cuvântul cheie
abstract - O clasă poate extinde o altă clasă și poate implementa o interfață în același timp
Marele avantaj al interfețelor este că diferite clase pot fi folosite în același mod. Când una sau mai multe clase au în comun o interfață, numim acest lucru „polimorfism”.
PHP - Folosirea interfețelor
De data aceasta, interfața Animal declară două metode publice, fromFamily() și makeSound(). Cat și Dog implementează interfața, așa că fiecare clasă trebuie să includă ambele metode:
Exemplu
Cat și Dog implementează amândouă cele două metode ale interfeței:
Ieșire: script PHP
<?php
interface Animal {
public function fromFamily();
public function makeSound();
}
class Cat implements Animal {
public function fromFamily() {
echo "Din familia: Felidae (Rude: lei, tigri, jaguari, linx, pume și gheparzi).<br>";
}
public function makeSound() {
echo "Sunet: Meow.";
}
}
class Dog implements Animal {
public function fromFamily() {
echo "Din familia: Canidae (Rude: lupi, vulpi, coioți, șacali și câini domestici).<br>";
}
public function makeSound() {
echo "Sunet: Woff.";
}
}
echo "<h3>Pisici</h3>";
$cat = new Cat();
$cat->fromFamily();
$cat->makeSound();
echo "<h3>Câini</h3>";
$dog = new Dog();
$dog->fromFamily();
$dog->makeSound();
?>