Treci la conținutul principal

PHP - Moștenire

Prin moștenire, o clasă copil primește toate proprietățile și metodele publice și protejate ale clasei părinte și poate adăuga propriile proprietăți și metode.

Notă: O clasă copil nu are acces la metodele private ale părintelui ei.

Folosește cuvântul cheie extends pentru a crea o clasă moștenită.

În exemplul următor, Strawberry extinde Fruit. Datorită moștenirii, poate folosi proprietățile publice $name și $color și metodele publice __construct() și intro() din Fruit. Pe lângă acestea, Strawberry definește încă o metodă proprie, message().

Exemplu

Strawberry primește tot ce este public din Fruit și adaugă message():

Prompt
Creează o clasă PHP Fruit cu proprietățile publice $name și $color, un constructor și o metodă intro(). Apoi creează o clasă Strawberry care extinde Fruit și adaugă o metodă message(). Creează un obiect Strawberry și apelează ambele metode.
Ieșire: script PHP

PHP - Moștenirea și modificatorul de acces protected

Capitolul anterior a arătat că membrii protected sunt accesibili clasei însăși și claselor derivate din ea.

Pentru codul din exterior lucrurile stau altfel: un apel la o metodă protected de acolo se termină cu o eroare, în timp ce metodele public continuă să funcționeze normal.

Exemplu

Aici, codul din exterior apelează metoda protected intro() și primește o eroare:

Prompt
Creează o clasă Fruit cu o metodă protected intro() și o clasă copil Strawberry cu o metodă publică message(). Încearcă să apelezi intro() din afara clasei pentru a arăta că produce o eroare.
Ieșire: script PHP

Exemplu

Clasa derivată poate apela aceeași metodă protected din interior, fără nicio problemă:

Prompt
Creează o clasă Fruit cu o metodă protected intro() și o clasă copil Strawberry a cărei metodă message() apelează metoda protected intro() din interiorul clasei derivate.
Ieșire: script PHP

PHP - Suprascrierea metodelor moștenite

O clasă copil poate înlocui o metodă pe care o moștenește. Este suficient să definești în clasa copil o metodă cu același nume; aceasta se numește suprascriere.

În exemplul următor, Strawberry (copilul) oferă propriile __construct() și intro(), iar acestea suprascriu versiunile din Fruit (părintele):

Exemplu

Versiunile lui __construct() și intro() din Strawberry sunt cele care rulează:

Prompt
Creează o clasă Fruit cu un constructor și o metodă intro(). Apoi creează o clasă copil Strawberry care suprascrie atât __construct(), cât și intro() cu propriile implementări, adăugând o proprietate $weight.
Ieșire: script PHP

PHP - Cuvântul cheie final

Uneori, o clasă sau o metodă trebuie să rămână exact așa cum a fost scrisă. Cuvântul cheie final face exact asta: pe o clasă blochează moștenirea, iar pe o metodă blochează suprascrierea.

Exemplu

O clasă marcată cu final nu poate fi extinsă, așa că acest cod se termină cu o eroare fatală:

Prompt
Creează o clasă final Fruit și apoi încearcă să creezi o clasă Strawberry care o extinde, ceea ce va produce o eroare.
Ieșire: script PHP

Exemplu

O metodă marcată cu final nu poate fi suprascrisă într-o clasă copil, așa că și acest cod se termină cu o eroare fatală:

Prompt
Creează o clasă Fruit cu o metodă final intro(), apoi creează o clasă copil Strawberry care încearcă să suprascrie metoda intro(), ceea ce va produce o eroare.
Ieșire: script PHP