Treci la conținutul principal

PHP - Clase și metode abstracte

Unele metode au sens doar după ce o clasă copil completează detaliile. O metodă abstractă este exact așa ceva: părintele o declară, dar nu îi oferă nicio implementare și lasă această muncă în seama clasei sau a claselor copil.

O clasă cu cel puțin o metodă abstractă se numește clasă abstractă. Scopul ei este să impună o regulă: fiecare clasă derivată (clasă copil) trebuie să implementeze metodele abstracte declarate de părinte.

Atât clasele abstracte, cât și metodele abstracte sunt marcate cu cuvântul cheie abstract.

Iată cum arată asta în practică:

Exemplu

Car este abstractă și declară o metodă abstractă intro(), pe care fiecare dintre cele două clase copil o implementează:

Prompt
Creează o clasă abstractă Car cu o proprietate publică $name, un constructor și o metodă abstractă intro(). Apoi creează clasele copil Audi și Citroen, fiecare implementând intro() astfel încât să returneze un șir de caractere diferit. Creează obiecte și afișează cu echo prezentările lor.
Ieșire: script PHP

Explicația exemplului

Audi și Citroen extind amândouă clasa abstractă Car. Datorită acestei moșteniri, pot folosi proprietatea ei publică $name și metoda ei publică __construct().

intro() este diferită. Este abstractă, așa că fiecare clasă copil trebuie să ofere propria implementare.


Observații despre clasele abstracte

O clasă copil trebuie să respecte câteva reguli când implementează o metodă abstractă. Metoda trebuie să păstreze același nume, iar modificatorul ei de acces trebuie să fie același sau mai puțin restrictiv. De exemplu, o metodă abstractă declarată protected poate rămâne protected sau poate deveni public în clasa copil, dar nu poate deveni niciodată private. Tipul și numărul argumentelor obligatorii trebuie, de asemenea, să coincidă, deși clasa copil poate adăuga liber argumente opționale.

Pe scurt, aceste reguli se aplică atunci când o clasă copil moștenește o clasă abstractă:

  • Metoda din clasa copil are același nume ca metoda abstractă și o redeclară
  • Modificatorul ei de acces este același ca al părintelui sau mai puțin restrictiv
  • Primește același număr de argumente obligatorii și poate adăuga argumente opționale

PHP - Metodă abstractă cu argument

Și metodele abstracte pot primi argumente. Următoarele două exemple arată cum funcționează asta:

Exemplu

Metoda abstractă declară un argument, $name, iar clasa copil o implementează cu același argument:

Prompt
Creează o clasă abstractă ParentClass cu o metodă abstractă protected prefixName($name). Creează o clasă ChildClass care implementează prefixName și adaugă prefixul Dl. sau Dna. în funcție de nume. Testează cu John Doe, Jane Doe și Baby Doe.
Ieșire: script PHP

Exemplu

Aici, clasa copil adaugă două argumente opționale pe care metoda abstractă a părintelui nu le declară:

Prompt
Creează o clasă abstractă ParentClass cu o metodă abstractă protected prefixName($name). Creează o clasă ChildClass care implementează prefixName cu două parametri opționali suplimentari, $separator și $greet. Testează cu John Doe și Jane Doe.
Ieșire: script PHP