Podręcznik PHP
Poprzedni | Rozdział 13. Klasy i Obiekty | Następny

# `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.

Poprzedni | Spis treści | Następny
Klasy i Obiekty | Początek rozdziału | `Konstruktory`