Rozdzia│ 13. Klasy i objekty
class
Klasa jest zbiorem zmiennych i funkcji pracuj▒cych na tych zmiennych. Klasa jest definiowana przy u┐yciu poni┐szej sk│adni:
<?php
class Koszyk {
var $items; // zawarto╢µ naszego koszyka
// dodajemy $num sztuk artyku│u numer $artnr do koszyka
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
// usuwa $num sztuk artyku│u numer $artnr z koszyka
function remove_item ($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
Powy┐szy listing zawiera definicjΩ klasy Koszyk, kt≤ra sk│ada siΩ z skojarzeniowej tablicy przedmiot≤w oraz dw≤ch funkcji: dodaj▒cej i usuwaj▒cej elementy z tej tablicy.
Klasy s▒ typami, kt≤re zawieraj▒ kopiΩ aktualnych zmiennych. Aby utworzyµ zmienn▒ porz▒danego typu, zastosuj operator new.
$koszyk = new Koszyk;
$koszyk->add_item("10", 1);
W ten spos≤b zostanie utworzony obiekt $koszyk klasy Koszyk. Wywo│anie funkcji add_item() na rzecz tego obiektu, spowoduje dodanie 1 sztuki artyku│u nr. 10 do koszyka.
Klasy mog▒ byµ rozszerzane o inne klasy. Klasa rozszerzona (pochodna), posiada wszystkie zmienne i funkcje klasy bazowej oraz swoje definicje, choµ nie jest wspierane wielokrotne dziedziczenie. KlasΩ rozszerzon▒ tworzy siΩ u┐ywaj▒c s│owa extends.
class Nazwany_Koszyk extends Koszyk {
var $wlasciciel;
function ustaw_wlasciciel ($nazwa) {
$this->wlasciciel = $nazwa;
}
}
Powy┐szy listing przedstawia definicjΩ klasy Nazwany_Koszyk, kt≤ra dziedziczy wszystkie zmienne i funkcje po klasie bazowej Koszyk, a dodatkowo okre╢la zmienn▒ $wlasciciel oraz funkcjΩ ustaw_wlasciciel(). Funkcja ta umo┐liwia okre╢lanie w│a╢ciciela koszyka. Wci▒┐ mo┐esz u┐ywaµ funkcji z klasy Koszyk na obiektach klasy Nazwany_koszyk.
$ncart = new Nazwany_Koszyk;
// tworzy nazwany koszyk
$ncart->ustaw_wlasciciel ("kris");
// nazwa koszyka (w│a╢ciciela)
print $ncart->wlasciciel;
// wy╢wietla nazwΩ w│a╢ciciela koszyka
$ncart->add_item ("10", 1);
// (u┐ycie odziedziczonej funkcji)
W funkcjach nale┐▒cych do klasy, zmienna $this okre╢la obiekt w kt≤rym zosta│a okre╢lona. Mo┐esz u┐ywaµ wyra┐enia $this->nazwa_x, aby dostaµ siΩ do zmiennej lub funkcji nazwa_x w bie┐▒cym obiekcie.
Konstruktory to funkcje umieszczone w klasie, kt≤re s▒ automatycznie wywo│ywane podczas tworzenia nowego obiektu klasy. Konstruktor posiada zawsze tak▒ sam▒ nazwΩ jak nazwa klasy dla kt≤rej pracuje.
class Auto_Koszyk extends Koszyk {
function Auto_Koszyk () {
$this->add_item ("10", 1);
}
}
Powy┐ej zdefiniowali╢my klasΩ Auto_Koszyk. Klasa zawiera konstruktor o tej samej nazwie, kt≤ry podczas tworzenia nowego obiektu tej klasy, automatycznie dodaje do koszyka jedn▒ sztukΩ artyku│u nr. 10. Konstruktory mog▒ r≤wnie┐ pobieraµ dowolne argumenty, co czyni jej bardziej u┐ytecznymi.
class Konstruktor_Koszyk extends Koszyk {
function Konstruktor_Koszyk ($item = "10", $num = 1) {
$this->add_item ($item, $num);
}
}
$domyslny_koszyk = new Konstruktor_Koszyk;
$inny_koszyk = new Konstruktor_Koszyk ("20", 17);
Ostrze┐enie |
Dla klas rozszerzonych (pochodnych), konstruktor klasy bazowej nie jest automatycznie wywo│ywany w momencie wywo│ania konstruktora klasy pochodnej. |
|