index








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:
index
index
index
index
index
index
index
index
index

więcej podobnych podstron