|
Wiadomo nie od dziś, że PHP obsługuje programowanie obiektowe. Tworzenie kodu obiektowego w PHP4 jest łatwe, wystarczy nieco praktyki. W niniejszym tekście postaram się wszystkich zachęcić do tejże praktyki ;).
Trzeba zacząć od tego, czym jest programowanie obiektowe. Trudno to określić w jednym zdaniu ;). Kod obiektowy jest podzielony na klasy. W klasach definiuje się funkcje. Funkcje zdefiniowane w klasie są metodami. Myślę, że tyle na razie starczy.
Przykładem klasy może być poniższy kod:
<?php
class strefa
{
function hellow_world( )
{
echo "Hellow world<br>";
}
function online( $atrybut )
{
echo "Przekazales do funkcji atrybut ". $atrybut;
}
}
?>
Używanie klas jest zrozumiałe i logiczne.
s
<?php
$sw = new strefa; // tworzymy nowy objekt
$sw->hellow_world();
$sw->online( 'bardzo fajny' );
?>
Wynik działania tego przykładu:
Hellow world Przekazales do funkcji atrybut bardzo fajny
Widzicie, że to nic trudnego :). Co bardziej spostrzgawczy zauważyli strzałki :). Strzałki to wskazanie, że zmienna jest obiektem. Jeśli użyjecie strzałki przy zwykłej zmiennej otrzymacie błąd.
Do tej pory nic ciekawego nie pokazałem. Po prostu zwykła funkcja i tyle. Teraz omówimy bardzo ciekawy mechanizm używania zmiennych klasowych.
W klasie można zdefiniować zmienne, które będą dostępne poprzez objekt na przykład:
<?php
class strefa
{
var $zmienna = 'Tekst';
function metoda()
{
echo $this->zmienna;
}
}
?>
Przykład działania:
<?php
$sw = new strefa;
echo $sw->zmienna .'<br>';
$sw->zmienna = 'Nowy tekst';
echo $sw->zmienna .'<br>';
$sw->metoda();
?>
Wynik:
Tekst Nowy tekst Nowy tekst
W ten sposób można w bardzo łatwy sposób można używać wielu zmiennych, ale ich deklaracja nie może się odbywać innymi zmiennymi. To znaczy że:
<?php
class strefa
{
var $zmienna = array( 'a','b','c'); // to jest dobrze
var $blabla = $zmienna; // to jest źle
}
?>
Jak widać zaczyna się konkretna zabawa :). Następny przykład również ukazuje działanie zmiennych.
<?php
class strefa
{
var $a = 'Zmienna a';
function bla( )
{
$this->b = 'Zmienna b';
}
function echo_bla()
{
echo $this->b;
}
}
?>
Przykład użycia:
<?php
$sw = new strefa;
echo $sw->a .'<br>';
echo $sw->b .'<br>';
$sw->bla();
echo $sw->echo_bla();
?>
Wynik:
Zmienna a
Zmienna b
Jak widać zmienna $b nie jest dostępna spoza klasy. Można powiedzieć, że jest ona prywatna i można ją używać tylko wewnątrz klasy.
Jeśli chcecie użyć wewnątrz klasy zmienną spoza niej bez przekazywania jej za pomocą obiektu ( $sw->zmienna = $blabla ) możecie zrobić tak:
<?php
class strefa
{
function bla()
{
global $moja;
$this->moja = $moja;
}
}
?>
W ten sposób macie dostępną jedną zmienna w całej klasie bez definiowania jej we wszystkich metodach.
Macie teraz już jako-takie pojęcie o programowaniu obiektowym, ale to jeszcze nie wszsytko ;). Kolejnym plusem kodu objektowego jest dziedziczenie.
Znowu trudno jest określić co to jest dziedziczenie w jednym zdaniu. Dziedziczenie w PHP4 to pzekazanie jednej klasie metod i zmiennych z drugiej klasy. Klasa dziedzicząca ma dostęp do wszystkich metod zdefiniowanych w klasie dziedziczonej.
Definicja nie brzmi zachęcająco ale to nic trudnego :).
Przykad dziedziczenia
<?php
class strefa
{
var $sw = 'Atrybut z klasy strefa';
function sw()
{
$this->ws = 'Zmienna z klasy strefa';
}
}
class php extends strefa
{
function www()
{
echo $this->sw .'<br>';
$this->sw();
echo $this->ws .'<br>';
}
}
?>
Przykad użycia:
<?php
$w = new php;
?>
Wynik:
Atrybut z klasy strefa Zmienna z klasy strefa.
Przy okazji zobaczyliście jak wygląda konstruktor w PHP4. Jest to po prostu funkcja o tej samej nazwie co klasa. Można do niej przekazywać argumenty jak do zwykłej funkcji np:
<?php
$sw = new strefa('atrybut 1', 'atrybut 2');
?>
Proste jak dwa kilko gwoździ :).
Musicie wiedzieć, że jeśli w klasie www istniałaby metoda sw pokryłaby ona metodę z klasy strefa. To samo tyczy się argumentów (chodzi mi o var $x) i zmiennych klasowych. Jeśli w klasie strefa macie zmienną $a ($this->a) i przypiszecie jej jakąś wartość i następnie użyjecie w klasie dziedziczącej konstrukcji $this->a = ''; to zmienna klasowa a będzie pusta. Pamiętajcie, zawsze sprawdzajcie czy zmienna jest zdefiniowana za pomocą isset() lub empty().
Teraz już wiecie jak działa programowanie obiektowe (mam nadzieję ;). Jeśli coś w dalszym ciągu jest nie jasne to piszcie do mnie postaram się w miarę możliwości pomóc. |