MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Interfețe

O interfață definește un design abstract pe care trebuie să îl respecte clasa care îl implementează. Interfața definește metode fără implementare, iar clasa care implementează interfața trebuie să definească aceste metode. Utilizarea interfeței garantează că o clasă are o anumită funcționalitate descrisă de interfață.

Interfața este definită folosind cuvântul cheie interface, urmat de numele interfeței și blocul de cod al interfeței în acolade:

interface Messenger {}

Aici este definită interfața Messenger. În interiorul blocului interfeței, în acolade, sunt definite semnăturile metodelor. Toate aceste metode pot fi doar publice, adică cu modificatorul public, sau fără modificator de acces (ceea ce este echivalent cu modificatorul public):

interface Messenger
{
   function send();
}

Interfețele pot conține doar semnăturile metodelor - numele funcțiilor și lista de parametri în paranteze, urmate de punct și virgulă. Astfel, în acest caz, este declarată metoda send(). Aceasta nu are implementare - implementarea specifică va fi definită de clasa care implementează această interfață.

Pentru ca o clasă să implementeze o interfață, se folosește cuvântul cheie implements, urmat de numele interfeței:

<?php
interface Messenger
{
   function send();
}
class EmailMessenger implements Messenger 
{
   function send()
   {
       echo "Trimitere mesaj prin e-mail";
   }
}
$outlook = new EmailMessenger();
$outlook->send();
?>

În acest caz, clasa EmailMessenger implementează interfața Messenger. Dacă o clasă implementează o interfață, aceasta trebuie să implementeze toate metodele din interfață. Astfel, în acest caz, clasa EmailMessenger definește metoda send() cu o anumită implementare.

Interfețele pot fi, de asemenea, moștenite de alte interfețe:

<?php
interface Messenger
{
   function send();
}
interface EmailMessenger extends Messenger
{
   
}
class SimpleEmailMessenger implements EmailMessenger 
{
   function send()
   {
       echo "Trimitere mesaj prin e-mail.";
   }
}
$outlook = new SimpleEmailMessenger();
$outlook->send();
?>

Când pot fi necesare interfețele? O interfață este un contract care specifică că o clasă va implementa o anumită funcționalitate. Putem folosi acest lucru în programul nostru. De exemplu, definim următorul cod:

<?php
interface Messenger
{
   function send($message);
}
function sendMessage(Messenger $messenger, $text)
{
   $messenger->send($text);
}

class EmailMessenger implements Messenger 
{
   function send($message)
   {
       echo "Trimitere mesaj prin e-mail: $message";
   }
}
$outlook = new EmailMessenger();
sendMessage($outlook, "Hello World");
?>

Pentru a trimite un mesaj, este definită funcția sendMessage(), care acceptă ca prim parametru un obiect de tip Messenger și ca al doilea parametru textul mesajului. Definiția primului parametru specifică faptul că valoarea transmisă acestui parametru trebuie să implementeze interfața Messenger.

În funcția în sine, știm că primul parametru este un obiect care implementează interfața Messenger, deci putem apela metoda send() pentru a trimite mesajul:

function sendMessage(Messenger $messenger, $text)
{
   $messenger->send($text);
}

Implementarea multiplă a interfețelor

O clasă poate implementa mai multe interfețe simultan. În acest caz, toate interfețele sunt enumerate prin virgulă după cuvântul implements. Clasa trebuie să implementeze metodele tuturor interfețelor implementate:

interface Camera
{
   function makeVideo();
   function makePhoto();
}
interface Messenger
{
   function sendMessage($message);
}

class Mobile implements Camera, Messenger
{
   function makeVideo(){ echo "Înregistrare video";}
   function makePhoto(){ echo "Fotografiere";}
   function sendMessage($message) {echo "Trimitere mesaj $message";}
}
$iphone12 = new Mobile();
$iphone12->makePhoto();
← Lecția anterioară Lecția următoare →