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.
Poprzedni | Spis tre╢ci | NastΩpny |
Klasy i Obiekty | Pocz▒tek rozdzia│u | Konstruktory |