Zßklady objektov∞ orientovanΘho programovßnφ (OOP) nalezneme takΘ v PHP. OOP by m∞lo nßÜ k≤d zp°ehlednit a zv²Üit efektivnost naÜφ prßce.
T°φdu si lze p°edstavit jako typ, kterΘmu jsou p°i°azeny urΦitΘ funkce. Po deklaraci t°φdy m∙₧eme vytvß°et jejφ instance (objekty). Deklarace t°φdy vypadß nßsledovn∞:
class < nßzev t°φdy > { < ΦlenskΘ prom∞nnΘ > < ΦlenskΘ funkce > }
Ukßzkovß t°φda m∙₧e vypadat t°eba takto:
class Auto { }
Jsou to lokßlnφ prom∞nnΘ, do kter²ch m∙₧eme uklßdat data. S t∞mito prom∞nn²mi m∙₧eme nßsledn∞ manipulovat pomocφ Φlensk²ch funkcφ. ╚lenskou prom∞nnou deklarujeme v∞tÜinou na zaΦßtku t°φdy s klφΦov²m slovem var. Pokud budeme deklarovat vφce prom∞nn²ch, m∙₧eme je odd∞lit Φßrkami. P°φkladem m∙₧e b²t nßsledujφcφ t°φda, kterß bude obsahovat n∞kolik Φlensk²ch prom∞nn²ch:
class Auto { var $Znacka, $Typ; }
Nynφ ji₧ m∙₧eme vytvo°it instanci tΘto t°φdy a pracovat s Φlensk²mi prom∞nn²mi.
<? // Deklarujeme t°φdu Auto. class Auto { // Deklarujeme ΦlenskΘ prom∞nnΘ. var $Znacka, $Typ; } // Vytvo°φme instanci t°φdy Auto. $auto = new Auto; /* Do Φlensk²ch prom∞nn²ch dosadφme hodnoty pomocφ znaku "->" a nßzvu prom∞nnΘ bez znaku "$". */ $auto->Znacka = "Peugeot"; $auto->Typ = "206"; // Pro kontrolu si m∙₧eme vytisknout obsah prom∞nnΘ $Typ. echo $auto->Typ; ?>
Jak ji₧ bylo °eΦeno, ΦlenskΘ funkce umo₧≥ujφ prßci nejen s Φlensk²mi prom∞nn²mi, ale i s databßzφ, soubory, atd. Na p°φklad∞ si ukß₧eme Φlenskou funkci, kterß nßm zobrazφ obsah prom∞nnΘ $Znacka a $Typ.
Jak si vÜimnete na p°φklad∞, pracujeme uvnit° funkcφ s Φlensk²mi prom∞nn²mi pomocφ zßpisu "$this->NazevPromenne". Za klφΦovΘ slovo "$this" se po vytvo°enφ instance automaticky doplnφ nßzev instance t°φdy.
<? // Deklarujeme t°φdu Auto. class Auto { // Deklarujeme ΦlenskΘ prom∞nnΘ. var $Znacka, $Typ; // Deklarujeme Φlenskou funkci Vypis. function Vypis() { echo $this->Znacka." ".$this->Typ; } } // Vytvo°φme instanci t°φdy Auto. $auto = new Auto; /* Do Φlensk²ch prom∞nn²ch dosadφme hodnoty pomocφ znaku "->" a nßzvu prom∞nnΘ bez znaku "$". */ $auto->Znacka = "Peugeot"; $auto->Typ = "206"; // Zavolßme Φlenskou funkci Vypis. $auto->Vypis(); ?>
Konstruktor je Φlenskß funkce, kterß mß stejn² nßzev jako nßzev t°φdy. Pomocφ konstruktoru m∙₧eme uvnit° t°φdy vykonat urΦit² k≤d ihned po vytvo°enφ jejφ instance. Stejn∞ jako u funkcφ m∙₧eme v konstruktoru ponechat implicitnφ hodnoty.
<? // Deklarujeme t°φdu Auto. class Auto { // Deklarujeme ΦlenskΘ prom∞nnΘ. var $Znacka, $Typ; /* Deklarujeme konstruktor, kter² bude p°ebφrat $znacka a $typ. */ function Auto($znacka, $typ) { $this->Znacka = $znacka; $this->Typ = $typ; } // Deklarujeme Φlenskou funkci Vypis. function Vypis() { echo $this->Znacka." ".$this->Typ; } } // Vytvo°φme instanci t°φdy Auto. $auto = new Auto("Peugeot", "206"); // Zavolßme Φlenskou funkci Vypis. $auto->Vypis(); ?>
D∞diΦnost umo₧≥uje vytvo°enφ novΘ t°φdy, kterß "zd∞dφ" vÜechny ΦlenskΘ funkce a ΦlenskΘ prom∞nnΘ v²chozφ t°φdy. M∙₧eme si tak vytvo°it t°φdu, kterß bude stejnß nap°φklad pro vÜechny typy aut a pro jednotlivΘ znaΦky si vytvo°it novou t°φdu, kterß zd∞dφ v²chozφ ΦlenskΘ prom∞nnΘ a ΦlenskΘ funkce. Vytvo°it novou t°φdu, kterß zd∞dφ ΦlenskΘ prom∞nnΘ a ΦlenskΘ funkce m∙₧eme pomocφ klφΦovΘho slova extends.
<? // Deklarujeme t°φdu Auto. class Auto { // Deklarujeme ΦlenskΘ prom∞nnΘ. var $Znacka, $Typ; // Deklarujeme Φlenskou funkci Vypis. function Vypis() { echo $this->Znacka." ".$this->Typ; } } class AutoVykon extends Auto { var $Vykon; function VypisVse() { echo $this->Znacka." ".$this->Typ." ".$this->Vykon; } } // Vytvo°φme instanci t°φdy Auto. $auto = new AutoVykon; /* Do Φlensk²ch prom∞nn²ch dosadφme hodnoty pomocφ znaku "->" a nßzvu prom∞nnΘ bez znaku "$". */ $auto->Znacka = "Peugeot"; $auto->Typ = "206"; $auto->Vykon = "90"; // Zavolßme Φlenskou funkci Vypis. $auto->VypisVse(); ?>
Pro tento dφl to bude vÜe. V p°φÜtφm dφle si povφme o formulß°φch..