Programowanie obiektowe > Lekcja 6
Dziedziczenie
Dodano: 21-06-2017 12:00
Przed Tobą wielka rzecz w temacie programowania obiektowego - dziedziczenie. Pewnie rozumiesz samo pojęcie dziedziczenia poza programowaniem (na przykład dziecko dziedziczy kolor oczu po matce). W programowaniu mamy podobnie: tworzona klasa może dziedziczyć po innej klasie, to znaczy przejąć jej właściwości oraz metody. Rzecz jasna klasa, która dziedziczy również może mieć swoje metody czy właściwości.
A więc pozostając przy tematyce ludzi, spójrzmy na jakiś przykład. Wyobraź sobie, że mamy system obsługujący przychodnię lekarską i dzieci oraz osoby dorosłe muszą być inaczej potraktowane. Jest jednak sporo informacji, jakie należy zebrać na temat każdej osoby: imię i nazwisko, adres, PESEL i tak dalej. Zapiszmy to przy użyciu klasy bazowej i dwóch klas dziedziczących.
<?php
class Person
{
public $name;
public function __construct(string $name)
{
$this->name = $name;
}
public function getName(): string
{
return $this->name;
}
}
class Adult extends Person
{
// code for adults
}
class Child extends Person
{
public function checkVaccinations(): bool
{
// code...
return true;
}
}
$person = new Child('Jan Kowalski');
echo $person->getName(); // result: Jan Kowalski
var_dump($person->checkVaccinations()); // result: bool(true)
Klasę, po której chcemy dziedziczyć, określamy poprzez extends. Gdybyśmy dziedziczenia nie znali, to musielibyśmy skopiować część funkcji z jednej klasy do drugiej, co rodziłoby tylko problemy - w przypadku zmiany lub problemów trzeba byłoby szukać w kilku miejscach.
Nadpisywanie elementów
Ktoś pewnie zastanowi się teraz co stanie się, gdy utworzy w klasie metodę lub właściwość o takiej samej nazwie, jaka już istnieje w klasie, po której dziedziczy. Śpieszę z wyjaśnieniem, że element z klasy bazowej zostanie nadpisany. Innymi słowy mówiąc, właściwość będzie miała taką wartość lub jak w klasie, która dziedziczy, a metoda będzie robiła to co ta zapisana w klasie, która dziedziczy. Może trochę zawile to brzmi, ale chyba rozumiesz działanie. Jeśli nie to poniższy przykład na pewno wszystko rozjaśni:
<?php
class Person
{
public $name = 'Jan';
}
class Child extends Person
{
public $name = 'Marek';
}
$person = new Child();
echo $person->name; // result: Marek
Jeżeli jednak zaistnieje potrzeba wywołania nadpisanej metody z klasy bazowej to jest taka możliwość. Wystarczy wywołać metodę z dopiskiem parent::.
<?php
class Person
{
public function checkVaccinations()
{
// code...
echo 'Check person!';
}
}
class Child extends Person
{
public function checkVaccinations()
{
parent::checkVaccinations();
echo 'Check child!';
}
}
$person = new Child();
$person->checkVaccinations(); // result: Check person!Check child!
Mam nadzieję, że udało Ci się zrozumieć dziedziczenie, bo to bardzo przydatna sprawa. Wykorzystywane jest ono w naprawdę wielu miejscach, a przykłady wyobrazić sobie chyba nietrudno. Momentami problematyczne może wydawać się to, że nie widzisz w jednym miejscu jakie metody ma dana klasa. Dlatego właśnie warto programować w IDE, które wszystko analizuje i podpowiada :)
Poprzednia lekcja Następna lekcja
Komentarze