2010-11-10 11:23:30

Programowanie obiektowe w PHP

Dzięki programowaniu obiektowemu możemy tworzyć rozbudowane programy w uporządkowany sposób. Umożliwia nam to podział programu na odrębne części – klasy. W klasie wyodrębniamy fragmenty programów, które są jakąś logiczną całością, odpowiadającą za jedną funkcjonalność, albo jeden spójny zbiór danych.

Ta logiczna całość może być wykorzystana wiele razy w jednym programie, jak również w innych programach. W miejscu, gdzie chcemy użyć daną klasę, tworzymy obiekt tej klasy. Obiektów może być kilka. Stosujemy je wszędzie tam, gdzie potrzebna jest nam dana funkcjonalność, jeżeli tę funkcjonalność musimy zmienić, robimy to w jednym miejscu – w definicji klasy. Skutki tej zmiany będą widoczne wszędzie tam, gdzie występują obiekty tej klasy.

Podobna sytuacja występuje w przypadku, gdy w programie wystąpi jakiś błąd. Ten sam błąd może wystąpić w wielu miejscach, ale dzięki temu, że program jest oparty na klasach i obiektach tych klas, to przyczyna błędu występuje tylko w jednym miejscu w kodzie całego programu – w definicji klasy. Gdy usuniemy błąd, usterka znika z każdego miejsca, w którym wystąpiła.

I coś, co dla wielu będzie prawdopodobnie najważniejszą zaletą. Umiejętność programowania obiektowego umożliwia używanie frameworków i stosowanie wzorców projektowych, co szalenie ułatwia i przyspiesza proces powstawania programów.

Teraz jak to wygląda w praktyce. Utworzę klasę Notatka

class Notatka
{
	private $autor;
	private $notatka;
 
	public function zapisz_autora($autor)
	{
		$this->autor=$autor;
	}
 
	public function zapisz_notatke($notatka)
	{
		$this->notatka=$notatka;
	}
 
	public function wyswietl()
	{
		echo '<h2>'.$this->autor.'</h2>';
		echo '<p>'.$this->notatka.'</p>';
	}
}
 
$obiekt =new Notatka();
$obiekt->zapisz_autora($_POST['autor']);	
$obiekt->zapisz_notatke($_POST['notatka']);	
$obiekt->wyswietl();

Klasa

Klasa jest prototypem obiektu – strukturą zawierającą zarówno dane (pola klasy) jak i funkcje (metody klasy).
Klasę definiuje się słowem kluczowym class po którym podajemy nazwę klasy, a następnie wewnątrz nawiasów klamrowych definiujemy jej pola i metody.

Obiekt

Obiekt jest instancją klasy zawierającą się w konkretnej zmiennej wykorzystywanej w kodzie programu.
Obiekt danej klasy tworzy się podstawiając do zmiennej instancję klasy tworzoną operatorem new. Dostęp do pól i metod klasy następuje poprzez nazwę zmiennej, operator ->, a następnie nazwę pola lub metody. Dostęp do pól i metod wewnątrz klasy otrzymuje się poprzez referencję $this->

Kwalifikatory dostępu

Definiując wewnątrz klasy pola i metody używamy kwalifikatorów dostępu. Do dyspozycji mamy trzy kwalifikatory dostępu: public, private, protected. Składowe o dostępie public są dostępne zarówno wewnątrz klasy jak i na zewnątrz. Do składowych o dostępie private dostęp istnieje jedynie z wewnątrz klasy, w której składowa została zdefiniowana. Do składowych o dostępie protected dostęp istnieje jedynie z wewnątrz klasy, w której składowa została zdefiniowana, oraz klas potomnych.

Metody

Metody klasy są funkcjami zdefiniowanymi wewnątrz klasy. Stosują się do nich wszystkie zasady związane ze zwykłymi funkcjami z uwzględnieniem kwalifikatorów dostępu.

Pola

Pola klasy są składowymi klasy przechowującymi dane dowolnego typu. Stosują się do nich wszystkie zasady dotyczące zwykłych zmiennych z uwzględnieniem kwalifikatorów dostępu.

Tagi: , , ,

10 odpowiedzi do “Programowanie obiektowe w PHP”

  1. Kamila pisze:

    Fajny temat. Dlaczego tak krótko. Mam nadzieję na więcej informacji na wideo. Czy będzie już jutro?

  2. Leszek Sewastianowicz pisze:

    Jutro? Być może. Na wideo będzie znacznie więcej. Zresztą cały temat jest dość obszerny. Całe szkolenie to ponad 5 godzin nagrania.

  3. alphatom79 pisze:

    Czekamy z niecierpliwością ;-)

  4. Adam Wlazło pisze:

    Witam, a czy to szkolenie również będzie dostępne do nabycia na dvd?

  5. Leszek Sewastianowicz pisze:

    Jeszcze nie wiem. Zależy od zainteresowania. Jeżeli ktoś będzie zainteresowany wersją dvd to proszę o wpis w tym miejscu.

  6. procek pisze:

    Bardzo dobrze, że ktoś w końcu postanowił wziąć się za obiektówkę. Nie, żebym się czepiał, ale metoda wyświetl może powodować problemy – jest mało uniwersalna bo zawiera kod HTML – nie można nic więcej z tymi danymi zrobić – nazywa się to efektem ubocznym klasy, których powinno być jak najmniej. Pewnie w następnych lekcjach będzie to już dobrze zrobione dzięki return, ale na pierwszy ogień może to uczyć złych nawyków. Tak czy inaczej artykuł przydatny :)

  7. Leszek Sewastianowicz pisze:

    W programowaniu nic nie jest w 100% dobre ani złe. HTML użyty w pewnych metodach może rzeczywiście utrudnić ich wykorzystanie, podobnie jak użycie nieodpowiedniej pętli, nieodpowiedniego zapytania SQL, czy zwracanie nieodpowiedniego typu danych. Wszystko zależy od przeznaczenia danej metody i danego obiektu. Kod do szkolenia przygotowywałem głównie pod kontem korzyści dydaktycznych. Najbardziej zależało mi, by lekcje były zrozumiałe dla kogoś, kto o programowaniu obiektowym nie słyszał nic lub prawie nic. Taki cel wymaga czasem uproszczeń, zwłaszcza, że w programowaniu obiektowym korzyści z niektórych jego cech ujawniają się przy dosyć dużych projektach. Przygotowywanie do szkolenia kodu na kilka tysięcy linii nie byłoby najlepszym rozwiązaniem. Dlatego pewne zagadnienia przedstawiam tak, by łatwiej było je zrozumieć i zorientować się w całym kodzie przykładu, zwłaszcza osobom początkującym. Może kiedyś pokuszę się na przygotowanie szkolenia z wzorców projektowych. Wtedy przykłady będą mogły (pewnie będą musiały), być bardziej rozbudowane, ale też odbiorcy takiego szkolenia będą musieli być bardziej doświadczonymi programistami.

  8. procek pisze:

    W pełni się z Tobą zgadzam – po prostu na początek łatwiej jest wywołać echo dla 2 zmiennych metody niż kombinować jakby tu zwrócić 2 zmienne returnem ;) Wzorce projektowe bardzo by się przydały – czekam z niecierpliwością :)

  9. estera396 pisze:

    Przy okreslaniu ‘public funkction wyswietl(0) chcialabym wiedziec co oznacza
    - zero(0);
    - co robi, jaka funkcje spelnia ‘.’ W szkoleniu jest napisane: echo ”.
    - czy musimy odmieniac przez osoby: notatke, czy mozemy zostawic notatka?
    Szkolenie bardzo fajne;)

  10. Leszek Sewastianowicz pisze:

    Cieszę się, że to co robię podoba się innym. Dzięki za każde dobre słowo.
    Wszystko, co znajduje się w nawiasach za nazwą metody, jest przekazywane do metody jako jej argumenty.
    Kropka jest operatorem konkatenacji – skleja łańcuchy znaków w jeden łańcuch.
    Nazw pól i metod nie odmieniamy w kodzie. Pola o nazwie „notatka” i „notatke” byłyby odrębnymi polami.

Dodaj odpowiedź