YGREG - Klasy w PHP
HOSTING
I
PHP
I
XML
I
CGI
I
HTML
I
FORUM
I
INNE
Dodaj stronę do ulubionych
Chcesz wiedzieć, kiedy pojawia się coś nowego? Wpisz swój e-mail:
Hosting wirtualny
Informacje
Cennik
Jazda próbna
PHP
Kurs PHP
Wprowadzenie
Część 1
Część 2
Część 3
Część 4
Część 5
Część 6
Cookies
Klasy w PHP
Parametry w adresie
Wyrażenia regularne
Upload plików
Skrypty PHP
Automat. FAQ
Banner
Forum
Imperator Stats
Komentarze
Komentarze (by JaX)
Księga gości (MySQL)
Księga gości (bez MySQL)
Księga gości (by Cezi)
Księga gości (by Occulkot)
Licznik
Logowanie
News
Profile
Składak
Sonda
Sonda tak/nie
Users Online
Uploader
XML
Kurs XML'a
Wprowadzenie
Pierwszy dokument XML
Sprawa ogonkowa
Przekształcenia
Narzędzia
Zasoby online
CGI
Kurs Perla
Wstęp
Uruchomienie
Składnia
CGI_PL
Warunki
Formmail
Formmail 2
Formweb
Tak/nie
HTML
Podstawy
Tagi
Tekst
Tabele
Formularze
Nagłowek
Inne
Kolory
Download
Ygreg offline
Narzędzia
Inne
Download
Błędy w stronach
Apache i okienka
Uprawnienia w UNIX'ie
Netscape 6
Darmowe konta
O mnie
Katalog stron:
HTML,
Java i JavaScript,
Grafika i design,
ASP,
PHP,
CGI,
Narzędzia,
Pozostałe
Klasy w PHP
Wstęp
Pisząc ten artykuł zakładam, że znasz już dobrze podstawy PHP. Bardzo przydatna będzie znajomość podstaw programowania obiektowego, ale bez niej też będzie można sobie poradzić. Jeżeli nie znasz jeszcze PHP zapraszam do przeczytania mojego kursu PHP.
Czym są klasy i obiekty
Pojęcia klasy i obiektu to podstawowe pojęcia w programowaniu zorientowanym obiektowo. Klasa jest czymś w rodzaju szablonu, na podstawie którego są tworzone obiekty. Najprościej będzie to pokazać na przykładzie. Na początek stworzymy prostą klasę:
class osoba
{
var $imie, $email;
}
Ten kod nie powoduje jeszcze stworzenia żadnych zmiennych. Zostaną one utworzone dopiero kiedy stworzymy obiekt tej klasy:
$ktostam=new osoba;
Teraz mamy zmienną $ktostam która jest obiektem klasy osoba. Zmienna $ktostam zawiera zmienne $imie i $email. To znowy najlepiej będzie pokazać na przykładzie:
$ktostam->imie="Leon";
$ktostam->email="leon@costam.pl";
Zwróć uwagę, że po znaku -> nie ma już znaku $.
Jedna klasa, wiele obiektów
Mając zdefiniowaną klasę możemy stworzyć wiele jej obiektów. Każdy z nich będzie miał osobną kopię zmiennych należących do klasy:
$ktostam=new osoba;
$ktostam->imie="Leon";
$ktostam->email="leon@costam.pl";
$ktostaminny=new osoba;
$ktostaminny->imie="Józef";
$ktostaminny->email="józek@costam.pl";
echo($ktostam->imie."<BR>"
.$ktostaminny->imie);
Tutaj ważna uwaga - odwołań do pól klasy nie można umieszczać wewnątrz napisów. Czyli ostatniej lini z powyższego kodu NIE MOŻNA zapisać jako
echo("$ktostam->imie <BR>
$ktostaminny->imie"); // ŹLE!!!
Funkcje w klasach
Wewnątrz klasy można także umieścić definicję funkcji. Robi się to z kilku powodów. Po pierwsze pozwala to na wprowadzenie pewnego porządku - dane i funkcje które na nich operują są ze sobą wyraźnie powiązane. Po drugie funkcje należącą do klasy wywołuje się dla konkretnego obiektu. Wewnątrz tej funkcji można używać zmiennych należących do obiektu. Znowu przykład:
class osoba
{
var $imie, $email;
function wypiszDane()
{
echo($this->imie.
"<BR><A HREF=".
$this->email.">".
$this->email.
"</A><BR>");
}
}
$ktostam=new osoba;
$ktostam->imie="Leon";
$ktostam->email="leon@costam.pl";
$ktostam->wypiszDane();
Jak widać w funkcji wypiszDane używam zmiennej $this. Zmienna ta oznacza obiekt dla którego została wywołana funkcja (w tym przykładzie $ktostam).
Konstruktor
Konstruktor jest specjalną funkcją, która jest wywoływana automatycznie natychmiast po utworzeniu obiektu klasy. Konstruktorem klasy jest funkcja o nazwie takiej samej jak klasa:
class osoba
{
var $imie, $email;
function osoba()
{
$this->imie="Twoje imię";
$this->email="Twój email";
}
}
Tablice obiektów
Obiekty klasy mogą być elementami tablicy:
class osoba
{
var $imie, $email;
}
$pracownicy[0]=new osoba;
$pracownicy[0]->imie="Stefan";
$pracownicy[0]->email="stefan@cos.pl";
$pracownicy[1]=new osoba;
$pracownicy[1]->imie="Adam";
$pracownicy[1]->email="adam@cos.pl";
$pracownicy[2]=new osoba;
$pracownicy[2]->imie="Wojtek";
$pracownicy[2]->email="wojtek@cos.pl";
Żaden problem, prawda? Rzeczywiście. Ale kłopot pojawi się gdy będzie trzeba np. posortować tę tablicę alfabetycznie według imion. Gdyby była to zwykła tablica z imionami - możnaby po prostu użyć funkcji sort. Ale tutaj będzie potrzeban funkcja usort. Funkcja usort różni się od sort tym, że pozwala użyć własnej funkcji do porównywania elementów. Zaczniemy więc od definicji tej funkcji:
function cmp($a, $b)
{
return(strcmp($a->imie, $b->imie));
}
Funkcja cmp musi zwracać -1, 0 lub 1 w zależności od tego, czy pierwszy parametr jest mniejszy, równy lub większy od drugiego. Teraz posortowanie tej tablicy będzie już proste:
usort($pracownicy, "cmp");
Dziedziczenie
Dziedziczenie pozwala na stworzenie nowej klasy przez rozszerzenie już istniejącej. Klasa dziedzicząca (potomna)ma wszystkie zmienne i funkcje klasy po której dziedziczy, oraz ewentualne nowe zmienne i funkcje. Teraz pokażę jak na podstawie klasy osoba utworzyć klasę pracownik:
class osoba
{
var $imie, $email;
}
class pracownik extends osoba
{
var $pensja;
function dajPodwyzke();
{
$this->pensja+=50;
}
}
Klasa pracownik zawiera zmienne $imie, $email i $pensja, oraz funkcję dajPodwyzke. Sposób użycia tej klasy będzie taki sam jak w poprzednich przykładach. Jest tylko jednen problem - przy tworzeniu klasy potomnej nie jest wywoływany konstruktor klasy rodzica. Czyli po wykonaniu kodu:
class a
{
var $liczba;
function a()
{
$this->liczba=7;
}
}
class b extends a
{
var $innaliczba;
function b()
{
$this->innaliczba=2;
}
}
$obiekt=new b;
$obiekt->liczba nie jest równe 7. Można temu zaradzić wywołując konstruktor klasy rodzica w konstruktorze klasy potomnej:
class b extends a
{
var $innaliczba;
function b()
{
$this->a();
$this->innaliczba=2;
}
}
Teraz po stworzeniu obiektu klasy b zostanie też wywołany konstruktor klasy a.
To już chyba wszystko co chciałem napisać. Jeżeli masz jakieś pytania lub komentarze, jak zwykle zapraszam na
forum.
Sonda tylko w wersji online.
16.09.2001
Artykuły "Cookies" i "Wyrażenia Regularne". Autor: Tomasz Szmigiel.
16.09.2001
Kolejna księga gości i skrypt do komentarzy.
29.08.2001
Wyszukiwarka do forum.
29.08.2001
Skrypty Komentarze i Sonda tak/nie.
29.08.2001
Skrypty Banner i Logowanie.
22.08.2001
Artykuł Parametry w adresie.
27.07.2001
Dizał XML, a w nim kurs XML'a autorstwa Pawła Stroińskiego.
21.07.2001
Skrypt FAQ.
19.07.2001
Serwery wirtualne50 MB, CGI, PHP już od 80 zł / rok.
19.07.2001
Wykupiłem domenę www.ygreg.com
(C)opyright 1997-2001
by Grzegorz Plebański
Wyszukiwarka
Podobne podstrony:
indexindexindexindexindexindexindexindexindexwięcej podobnych podstron