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";
}
}