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.
| Ostrzeżenie |
NIE jest możliwe rozbicie definicji klasy na wiele
plików. Także NIE jest możliwe rozbicie definicji
klasy na wiele bloków PHP, chyba że rozbicie to znajduje się wewnątrz
definicji metody. Poniższy kod nie będzie działać.
Jednakże poniższy kod jest dozwolony:
|
Poniższe uwagi dotyczą PHP 4.
| Uwaga! |
Nazwa stdClass jest używana wewnętrznie przez Zend i
jest zarezerwowana. W PHP nie możesz zdefiniować klasy o nazwie
stdClass.
|
| Uwaga! |
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.
|
| Uwaga! |
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.
|
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. 3 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,
czy obiekty będą się nazywać $koszyk,
$inny_koszyk, lub inaczej. 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'.
Notatka:
The $this pseudo-variable is not usually defined if
the method in which it is hosted is called statically. This is not,
however, a strict rule: $this is defined if a method is
called statically from within another object. In this case, the value of
$this is that of the calling object. This is
illustrated in the following example: