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ć 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 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 definiowane , jest bardzo ważna .