Dziedziczenie w PHP
Dziedziczenie jest jedną z najbardziej istotnych cech projektowania zorientowanego obiektowo. Na czym ono polega?
Jeżeli zdefiniujemy już pewną klasę w PHP, to gdy zajdzie potrzeba zbudowania klasy bardziej rozbudowanej, to możemy zwyczajnie rozszerzyć stworzoną już klasę o nowe pola i metody, bez konieczności powielania kodu już zdefiniowanych pól i metod.
Używamy przy tym następującej składni:
class klasa_potomna extends klasa_bazowa { //kod klasy (nowe pola i metody) }
W ten sposób tworzymy całą hierarchię klas, klasy bazowe i potomne.
Przykład 1
Utworzymy dwie klasy: bazową -
<?php // --- klasa bazowa
class Konto
{
private $numer;
function __construct($s)
{
$this->numer = $s;
}
public function setNumer($wartosc)
{
$this->numer = $wartosc;
}
public function getNumer()
{
return $this->numer;
}
}
// --- Klasa potomna
class Klient extends Konto
{
private $ime;
private $nazwisko;
function __construct($i,$n)
{
$this->imie = $i;
$this->nazwisko = $n;
}
public function setImie($wartosc)
{
$this->imie = $wartosc;
}
public function getImie()
{
return $this->imie;
}
public function setNazwisko($wartosc)
{
$this->nazwisko = $wartosc;
}
public function getNazwisko()
{
return $this->nazwisko;
}
}
$konto1 = new Klient('Jan','Kowalski');
$konto1->setNumer('23 123 0000 445634 33');
echo 'Numer konta: '.$konto1->getNumer().'<br>';
echo 'Imię właściciela: '.$konto1->getImie().'<br>';
echo 'Nazwisko właściciela: '.$konto1->getNazwisko().'<br>'; ?>
Omówmy ten przykład.
Najpierw definiujemy klasę Konto, która posiada jedno pole prywatne - numer konta (numer). Klasa posiada konstruktor i metody odczytu i zapisu wartości pola.
Następnie budujemy klasę Klient, która posiada pola imię i nazwisko klienta (imie, nazwisko). Tu również jest utworzony konstruktor i zdefiniowane metody odczytu i zapisu wartości obu pól. W tej klasie użyliśmy jednak słowa kluczowego extends, co oznacza, że klasa Klient rozszerza klasę Konto.
W ostatnich linijkach kodu tworzymy obiekt w klasie Klient z konkretnymi danymi osobowymi i numerem konta, ale zauważ, że robimy to z poziomu klasy Klient, a nie klasy Konto. Metoda setNumer() jest dostępna w obu klasach, mimo, że jej definicji nie ma w klasie Klient!
To jest właśnie magia programowania obiektowego.
© medianauka.pl, 2021-12-02, A-4291
Data aktualizacji artykułu: 2024-06-30