Podręcznik PHP
Poprzedni
Następny
Rozdział 14.
Klasy i Obiekty
klasa
Klasa jest to zbiór zmiennych i funkcji operujących na tych zmiennych.
Do definicji klasy używana jest następująca składnia:
?php class Koszyk {var $zakupy; / / Zakupy w naszym koszyku / / Dodaj $num artykułów typu $artnr do wózka function dodaj_produkt ($artnr, $num) {$this - zakupy[$artnr] += $num;} / / Usuń $num artykułów typu $artnr z wózka function usun_produkt ($artnr, $num) {if ($this - zakupy[$artnr] $num) {$this - zakupy[$artnr] -= $num; return true;} else {return false;}}}?
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).
?php / * Nic z tego nie będzie działać w PHP 4. * / class Koszyk {var $dzisiejsza_data = date("Y-m-d"); var $nazwa = $imie; var $wlasciciel = 'Fred '. 'Jones'; var $artykuly = array("VCR", "TV");} / * Teraz wszystko zadziala. * / class Koszyk {var $dzisiejsza_data; var $nazwa; var $wlasciciel; var $artykuly; function Cart() {$this - dzisiejsza_data = date("Y-m-d"); $this - nazwa = $GLOBALS['imie']; / * itp... * /}}?
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.
?php $koszyk = new Koszyk; $koszyk - dodaj_produkt("10", 1); $inny_koszyk = new Koszyk; $inny_koszyk - dodaj_produkt("0815", 3);
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.
/ / poprawnie, jeden $$koszyk - artykuly = array( "10 "= 1); / / niepoprawnie, poniważ $koszyk - $artykuly zamienia się na $koszyk -" "$koszyk - $artykuly = array("10" = 1); / / poprawnie, ale może (ale nie musi) nie być tym, co zamierzaliśmy: / / $koszyk - $zmienna staje się $koszyk - artykuly $zmienna = 'artykuly'; $koszyk - $zmienna = array("10 "= 1);
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'.
Notatka:
Istnieje kilka przyjemnych funkcji do obsługi klas i obiektów.
Możesz je zobaczyć w rozdziale Funkcje obsługi klas i obiektów
Poprzedni
Spis treści
Następny
Zmienne funkcje
Początek rozdziału