czwartek,
PHP: Dziedziczenie
Dziedziczenie jest ważnym elementem OOP (programowania obiektowego) i pozwala na tworzenie bardziej modularnego i łatwego do zarządzania kodu – pozwala na tworzenie nowych klas na bazie istniejących. Klasa podrzędna (nazywana też klasą pochodną) dziedziczy metody i właściwości klasy nadrzędnej (nazywanej też klasą bazową), co umożliwia ponowne użycie kodu oraz organizację i strukturalizację kodu. W PHP podobnie jak w innych językach programowania obiektowego dziedziczenie daje możliwość tworzenia bardziej złożonych struktur danych i funkcjonalności, jednocześnie zachowując zasadę DRY (Don't Repeat Yourself).
Podstawy dziedziczenia w PHP
Definiowanie klasy nadrzędnej
Najpierw tworzysz klasę nadrzędną, która zawiera wspólne właściwości i metody, które będą dziedziczone.
class Pojazd {
public $marka;
public $model;
public function start() {
echo "Pojazd uruchomiony";
}
}
Dziedziczenie w klasie pochodnej
Tworzysz klasę pochodną, która dziedziczy z klasy nadrzędnej. Używasz słowa kluczowego extends
do wskazania, że klasa dziedziczy z innej klasy.
class Samochod extends Pojazd {
public $liczbaDrzwi;
public function otworzDrzwi() {
echo "Drzwi otwarte";
}
}
W tym przykładzie klasa Samochod
dziedziczy właściwości i metody klasy Pojazd
(takie jak marka
, model
i start
), a także definiuje własną właściwość (liczbaDrzwi
) i metodę (otworzDrzwi
).
Tworzenie obiektów i dostęp do właściwości/metod
Możesz tworzyć instancje klasy pochodnej i korzystać zarówno z dziedziczonych, jak i własnych właściwości i metod.
$mojSamochod = new Samochod();
$mojSamochod->marka = "Toyota";
$mojSamochod->model = "Corolla";
$mojSamochod->liczbaDrzwi = 4;
$mojSamochod->start(); // Wywołanie dziedziczonej metody
$mojSamochod->otworzDrzwi(); // Wywołanie własnej metody
Przesłanianie metod (method overriding)
Klasa pochodna może przesłonić metody klasy nadrzędnej, definiując metodę o tej samej nazwie.
class Samochod extends Pojazd {
public function start() {
echo "Samochód uruchomiony";
}
}
W tym przypadku, kiedy wywołasz metodę start
na obiekcie klasy Samochod
, zostanie użyta przesłonięta wersja metody.
Słowo kluczowe parent
Wewnątrz przesłoniętych metod możesz odwołać się do metody klasy nadrzędnej za pomocą słowa kluczowego parent
.
class Samochod extends Pojazd {
public function start() {
parent::start(); // Wywołuje oryginalną metodę 'start' z klasy Pojazd
echo "Samochód uruchomiony";
}
}