extends

Bardzo czΩsto zachodzi potrzeba stworzenia klasy o funkcjach i zmiennych podobnych do ju┐ istniej▒cej klasy. Zasadniczo dobrze jest stworzyµ szablonow▒ klasΩ, kt≤ra mo┐e byµ u┐yta we wszystkich twoich projektach i przystosowywaµ j▒ do specyficznych potrzeb twojego projektu. Aby u│atwiµ ten proces, klasy mog▒ byµ rozszerzeniami innych klas. Rozszerzone, lub m≤wi▒c inaczej 'dziedziczone', klasy maj▒ wszystkie zmienne i funkcje klasy podstawowej (nazywa siΩ to dziedziczeniem, mimo ┐e nikt nie umar│) oraz to co do niej doda│e╢ w definicji rozszerzenia. Nie mo┐na odj▒µ pewnych rzeczy z klasy podstawowej, czyli oddefiniowaµ istniej▒cych w klasie podstawowej funkcji i zmiennych. Rozszerzona klasa jest zawsze zale┐na od jednej klasy bazowej - dziedziczenie wielokrotne nie jest obs│ugiwane. Klasy mo┐na rozszerzyµ u┐ywaj▒c s│owa kluczowego 'extends'.

class Nazwany_Koszyk extends Koszyk
{
    var $wlasciciel;
  
    function ustaw_wlasciciela ($nazwa)
    {
        $this->wlasciciel = $nazwa;
    }
}

Definiuje to klasΩ Nazwany_Koszyk, kt≤ry ma wszystkie zmienne i funkcje klasy Koszyk plus dodatkowa zmienna $wlasciciel i dodatkowa funkcja ustaw_wlasciciela(). Nazwany koszyk tworzy siΩ normalnym sposobem. Mo┐esz teraz ustawiaµ i pobieraµ nazwΩ w│a╢ciciela koszyka. Ca│y czas mo┐esz u┐ywaµ zwyk│ych funkcji koszyka dla nazwanego koszyka:

$nkoszyk = new Nazwany_Koszyk;        // Stw≤rz nazwany koszyk
$nkoszyk->ustaw_wlasciciela("kris");  // Nazwij koszyk
print $nkoszyk->wlasciciel;           // Wy╢wietl w│a╢ciciela koszyka
$nkoszyk->dodaj_przedmiot("10", 1);   // (funkcjonalno╢µ odziedziczona z
                                      // koszyka)

Taka relacja nazywana jest czΩsto relacj▒ "rodzic-potomek". Tworzysz klasΩ - rodzica - i u┐ywasz extends aby stworzyµ klasΩ opart▒ o klasΩ rodzica: klasΩ potomn▒. Mo┐esz tak┐e tworzyµ nowe klasy potomne oparte o t▒ klasΩ potomn▒.

Notatka: Klasy musza byµ zdefiniowane zanim zostan▒ u┐yte! Je╢li chcesz, aby klasa Nazwany_Koszyk rozszerza│a klasΩ Koszyk, musisz zdefiniowaµ klasΩ Koszyk jako pierwsz▒. Je╢li chcesz stworzyµ kolejn▒ klasΩ nazwan▒ Niebieski_Nazwany_Koszyk opart▒ o klasΩ Nazwany_Koszyk, musisz najpierw zdefiniowaµ klasΩ Nazwany_Koszyk. W skr≤cie: kolejno╢µ, w jakiej klasy s▒ definiowane, jest bardzo wa┐na.