webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> kursy online >> kurs php >> Część 6

Klasy

autor: Leszek 'leon' Krupiński, ostatnia modyfikacja: 2007-10-12

szukaj: klasy klasy obiekty obiekty dziedziczenie dziedziczenie konstruktor konstruktor kurs php kurs php

Klasy są ściśle związane z pojęciem obiektowych zasad pisania aplikacji. Jeśli ktoś nie spotkał się jeszcze z taką koncepcją, to postaram się ją objaśnić w kilku zdaniach.

Obiekt, tak jak w rzeczywistości, posiada swoje właściwości i można z nim zrobić różne rzeczy. Klasa nie jest obiektem, ale jego definicją (np. klasą jest kamień, ale nie jego konkretny egzemplarz). Definicja klasy zawiera zmienne (właściwości obiektu) i funkcje (rzeczy, które można zrobić z tymi obiektami).

Za pomocą takiej konwencji programistycznej czasem można łatwiej i naturalniej opisać interakcje między obiektami. Oto jak się definiuje przykładową klasę i przykładowe działania na niej - jako że to tylko przykład to i klasa nie jest zbyt ambitna:

<?php

/* Początek definicji klasy Koszyk - definiującej koszyk sklepowy */
class Koszyk
{

/* Definicja zmiennej - tablicy asocjacyjnej zawierającej numery artykułów i ich ilość */
var $artykuly;

// Funkcja dodająca podaną ilość artykułów do koszyka

function dodaj($numer, $ilosc){

$this->artykuly["$numer"] += $ilosc;

}

// Funkcja usuwająca podaną ilość artykułów z koszyka

function usun($numer, $ilosc){

if($this->artykuly["$numer"]>$ilosc)

$this->artykuly["$numer"]-=$ilosc;

else

$this->artykuly["$numer"]=0;

}

// Funkcja wyświetlająca zawartość koszyka

function wyswietl(){

while(list($k, $v) = each($this->artykuly))
if($v>0)
echo "Artykul nr $k - $v sztuk
";

}
}

// Przykład wykorzystania

$koszyk = new Koszyk;
$koszyk->dodaj('20', 2);
$koszyk->dodaj('12', 4);
$koszyk->dodaj('20', 5);
$koszyk->usun('12', 4);
$koszyk->wyswietl();
?>

Jak widać na załączonym przykładzie, aby dostać się do zmiennej lub funkcji będącej składową klasy należy użyć operatora "->". Wewnątrz funkcji należącej do klasy zmienna $this oznacza właśnie ten obiekt - należy używać do chcąc odwołać się do zmiennej lub funkcji należącej do klasy.

W obiektowej koncepcji programowania znajduje się takie pojęcie jak dziedziczenie. Jako że w PHP obiektowość jest bardzo uboga, tak więc i dziedziczenie jest bardzo uproszczone. Ogólnie rzecz mówiąc dziedziczenie służy do tworzenia nowych klas na podstawie innych, rozszerzając ich możliwości. Do naszej klasy można dodać nowy atrybut - nazwę właściciela (zakładam, że przed podanym listingiem w pliku znajduje się definicja klasy Koszyk):

<?php

class Nazwany_koszyk extends Koszyk{

var $nazwa;

function ustaw_nazwe($nowa_nazwa){

$this->nazwa = $nowa_nazwa;

}
}

$koszyk = new Nazwany_koszyk;
$koszyk->ustaw_nazwe('Fredzio');
$koszyk->dodaj('2', 34);
echo 'Właściciel: '.$koszyk->nazwa.'<br/>';
$koszyk->wyswietl();

?>

Kolejnym pojęciem z zakresu obiektowości jest konstruktor. Konstruktor jest to funkcja o takiej samej nazwie jak klasa, która ustala początkowe wartości zmiennych (wywoływana jest automatycznie przy tworzeniu obiektu). Konstruktorowi można podać pewne wartości przy tworzeniu obiektu. Oto kolejna wersja koszyka wyposażona w konstruktor, który ustawia nazwę właściciela na podaną lub "Anonim" jeśli jej nie podano:

<?

class Auto_koszyk extends Nazwany_koszyki
{

function Auto_koszyk( $nazwa = 'Anonim'){

$this->ustaw_nazwe($nazwa);

}
}

$koszyk = new Auto_koszyk('Jakiś właściciel');
$koszyk->dodaj('4', 30);
echo 'Właściciel: '.$koszyk->nazwa.'<br/>';
$koszyk->wyswietl();

?>

Leszek 'leon' Krupiński

Zagadnienia poruszane w tej części kursu:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org