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



©® Media Nauka 2008-2023 r.