Klasa jest to zbiór zmiennych i funkcji operujących na tych zmiennych.
Do definicji klasy używana jest następująca składnia:
Definiuje to klasę o nazwie Koszyk, która zawiera tablicę asocjacyjną
artykułów znajdujących się w wózku i dwie funkcje do dodawania i usuwania
produktów z koszyka.
| Uwaga! |
Poniższe uwagi dotyczą PHP 4.
Nazwa stdClass jest używana wewnętrznie przez Zend i
jest zarezerwowana. W PHP nie możesz zdefiniować klasy o nazwie
stdClass.
Nazwy funkcji __sleep i __wakeup
mają magiczne znaczenie dla klas w PHP. Klasy nie mogą zawierać funkcji
o tych nazwach, chyba że zgadzasz się na przypisanie do nich magicznej
funkcjonalności. Poniżej możesz znaleźć więcej informacji.
PHP rezerwuje wszystkie nazwy funkcji zaczynające się od __ na funkcje
magiczne. Zalecane jest nieużywanie funkcji z nazwami zaczynającymi się
od __ chyba że chcesz jakiejś magicznej funkcjonalności.
|
Notatka:
W PHP 4 dozwolone są tylko stałe inicjalizatory zmiennych
var. Aby zainicjalizować zmienne z nie-stałymi
wartościami, potrzebujesz funkcję inicjalizacyjną, która jest wywoływana
automatycznie zaraz po utworzeniu obiektu z danej klasy. Taka funkcja
zwana jest konstruktorem (zobacz poniżej).
Klasy są typami, które są w zasadzie tylko schematami dla właściwych
zmiennych. Zmienne pożądanego typu musisz stworzyć korzystając z operatora
new.
Kod ten tworzy obiekty $koszyk i $inny_koszyk, oba klasy Koszyk. Funkcja
dodaj_produkt() obiektu $koszyk zostaje wywołana w celu dodania 1 artykułu
typu "10" do koszyka $koszyk. 4 przedmioty typu "0815" dodawane są do
koszyka $inny_koszyk.
I $koszyk i $inny_koszyk mają funkcje dodaj_produkt(), usun_produkt() i
zmienne. Są to osobne funkcje i zmienne. Obiekty mogą być postrzegane jako
katalogi w systemie plików. W systemie plików możesz mieć dwa różne pliki
README.TXT, ale tylko jeśli istnieją w osobnych katalogach. Aby odczytać
plik, będąc w głównym katalogu, musisz podać pełną ścieżkę do tego pliku.
Tak samo jest przy obiektach: musisz podać pełną nazwę funkcji, z której
chcesz skorzystać. W terminologii PHP katalogiem głównym będzie globalna
przestrzeń nazw a separatorem ścieżki będzie ->. W związku z tym nazwy
$koszyk i $inny_koszyk zawierają zupełnie inne zmienne. Zauważ, że zmienna
nazywa się $koszyk->artykuly, a nie $koszyk->$artykuly, ponieważ
nazwa zmiennej może zawierać tylko jeden znak dolara.
Wewnątrz definicji klasy, nie wiesz pod jaką nazwą obiekt będzie dostępny
dla twojego programu: w momencie pisania klasy Koszyk, nie było wiadomo,
że obiekty będą się nazywać $koszyk lub $inny_koszyk. W związku z tym nie
możesz napisać $koszyk->artykuly wewnątrz klasy Koszyk. Zamiast tego,
aby uzyskać dostęp do funkcji i zmiennych zawartych w klasie, można użyć
pseudo-zmiennej $this, która może być odczytana jako 'moje własne' lub
'bieżący obiekt'. A więc '$this->artykuly[$nrart] += $liczba' może być
odczytane jako 'dodaj $liczba do licznika $nrart z mojej własnej tablicy
artykuly' lub 'dodaj $liczba do licznika $nrartz tablicy artykuly zawartej
w bieżącym obiekcie'.