Programowanie Obiektowe w PHP5
Programowanie zorientowane obiektowo (z ang. OOP - Object Oriented Programming) jest niezwykle przydatną i dającą ogromne możliwości techniką. W przeciwieństwie do struktur znanych choćby z języka C, obiekty umożliwiają bardziej zaawansowane czynności.
Dobry system obiektowości to jeden z kilku powodów, tego, że Java staje się coraz bardziej popularna. Wraz z pojawieniem się PHP5 i nowej wersji silnika Zend, obiektowość traktowana nieco po macoszemu w poprzednich wersjach, stała się czymś o czym programiści wielu obiektowych języków mogą tylko pozazdrościć.
Klasy i obiekty
Naukę programowania zorientowanego obiektowo należy zacząć od wyjaśnienia kilku podstawowych pojęć. Czym zatem jest klasa? Krótko rzecz ujmując jest to opis obiektu. To w niej zawarte są informacje na temat pól klasy i zdefiniowanych metod. Uważny czytelnik zapyta no tak, ale co to są pola i metody klasy. Otóż pola to nic innego jak zmienne przechowujące daną wartość. Metody natomiast są to funkcje, które można wywołać używając pewnego obieku.
Tyle teorii, czas rozjaśnić nieco sprawę i pokazać jak to działa w PHP. Klasę w PHP definiujemy poprzez użycie słowa kluczowego class.
![]()
//Definiujemy klasę o nazwie Klasa1
class Klasa1{
}
![]()
Ktoś powie co nam z takiej klasy. Właściwie to nic ;) Ale o przydatności przekonamy się później.
Funkcje, konstruktor i destruktor
Konstruktor jest to specjalna metoda klasy, która umożliwia tworzenie nowej instancji obiektu. Destruktor jest przeciwieństwiem konstruktora, czyli jest to funkcja wywoływana, aby zniszczyć obiekt. Jeżeli ani konstruktor, ani destruktor nie są zdefiniowane to PHP automatycznie tworzy domyślny konstruktor i destruktor. Jak wykorzystać funkcje można zobaczyć w poniższym kodzie:
![]()
//Definicja klasy
class HTMLForm{
//Tworzymy pusty konstruktor
function __construct(){
}
![]()
//Funkcja zwracająca pusty formularz
function getHTMLCode($action, $method){
return '<form action="'.$action.'" method="'.$method.'"></form>';
}
}
![]()
//Nowy obiekt
$obiekt = new HTMLForm();
echo $obiekt->getHTMLCode('nowy.php','POST');
![]()
Z powyrzszego kodu można wyczytać także, jak tworzymy nowy obiekt. W tym celu wykorzystujemy operator new. Po nim podajemy nazwe klasy i w nawiasach parametry. Parametry podane w nawiasach muszą być zgodne z definicją konstruktora.
Pola klasy
Teraz powiększmy możliwości klasy HTMLForm o opcje podawania treści. Treść będziemy przekazywać przez funkcje setContent. Do pola obiektu odwołujemy się używając operatora "->".
![]()
class HTMLForm{
//private przed nazwą zmiennej oznacza prywatny dostęp, czyli odwołac się do niego możeby tylko z wewnątrz klasy
private $content;
![]()
//Tworzymy pusty konstruktor
function __construct(){
}
![]()
//Funkcja umożliwiająca ustawienie wartości polu content
function setContent($content){
//$this jest referencją do siebie (obiektu), jest to obiekt klasy HTMLForm
//W ten sposób odwołujemy się do własnego pola lub wywołukjemy własną metodę
$this->content = $content;
}
![]()
//Funkcja zwracająca pusty formularz
function getHTMLCode($action, $method){
return '<form action="'.$action.'" method="'.$method.'">'.$this->content.'</form>';
}
}
![]()
Poziomy dostępu: private, public i protected
Jak już wcześniej mogliśmy zobaczyć przed polami klasy definiujemy poziom dostępu. W ten sposób możemy zapewnić, że tylko zmianę wartości można dokonać tylko w oczekiwany sposób.
Private oznacza, że dostęp do pola czy metody jest możliwy tylko z wnętrza klasy (metody obiektu).
Public oznacza, że do pola czy metody można odwoływać się z dowolnego miejsca. Public jest stosowane domyślnie dla funkcji.
Protected oznacza, że do pola lub metody można odwołać się z wnętrza klasy lub wnętrza klasy dziedziczącej po niej. Dziedziczenie to niezwykle ważna cecha obiektowości, która umożliwia tworzenie wielu ciekawych rozwiązań.
Praktyczny przykład
Oto praktyczny, bardziej rozbudowany przykład programowania obiektowego:
![]()
class HTMLForm{
//Pola klasy
private $action,$method,$input;
![]()
//Konstruktor z 2 parametrami
public function __construct($action,$method){
$this->action=$action;
$this->method=$method;
}
![]()
//Dodawanie nowego elementu formularza
public function addInputElement($name,$type,$value){
$this->input[] = array('name'=>$name,'type'=>$type,'value'=>$value);
}
![]()
//dodawnianie textboxa
public function addTextBox($name,$value){
//wywołanie metody klasy
$this->addInputElement($name,'textbox',$value);
}
![]()
//metoda zwracająca kod
public function getHTMLCode(){
$code = '<form action="'.$this->action.'" method="'.$this->method.'">';
foreach($this->input as $element){
$code .= $element['name'] .': <input name="'.$element['name'] .'" type="'.$element['type']. '" value="'.$element['value'].'"><br />';
}
return $code.'</form>';
}
}
//Utworzenie nowego obiektu
$form = new HTMLForm('index.php','POST');
//Dodanie nowego pola
$form->addTextBox('Imie','Zenek');
//Wyświetlenie formularza
echo $form->getHTMLCode();
![]()
Podsumowanie
Programowanie obiektowe daje ogromne możliwości wykorzystania. Mam nadzieję, że ten artykuł przybliżył Ci znaczenie i możlwości programowania obiektowego.










