Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
PHP - Část XI.
30. srpna 2000, 00.00 | Další díl seriálu o PHP. Tentokrát objekty a podpora objektově orientovaného programování v PHP.
Objektově orientované programování a PHP
OOP přináší do PHP skriptů celkové zpřehlednění, protože umožňuje definovat tzv. třídy, což jsou speciální datové typy, které mohou obsahovat proměnné (data), ale zároveň i funkce pracující s těmito daty. Do jedné třídy tak můžeme umístit všechny proměnné a funkce obsluhující nějakou událost, čímž dosáhneme zpřehlednění celého skriptu, protože nemusíme definovat několik funkcí a globálních proměnných, ale nadefinujeme si pouze třídu, která bude danou událost obsluhovat. Pokud máme nadefinovanou nějakou třídu, můžeme ve skriptu vytvářet její instance - objekty. Objekt je proměnná typu třída, pomocí níž přistupujeme k datům a funkcím v tomto objektu. Definice jednoduché třídy vypadá takto:
class jméno třídy
{
definice členských proměnných;
definice členských funkcí;
}
-
Členské proměnné
Definice členské proměnné se ve třídách
uvozuje klíčovým slovem var
, za kterým je čárkami oddělený
seznam proměnných. Definicí s klíčovým slovem var
může být
uvedeno více za sebou. Jméno třídy zpravidla začíná písmenem velké "C", není to však
podmínkou, pro přehlednost ale doporučuji se tohoto zvyku držet. Nyní si
nadefinujeme jednoduchou třídu, která bude uchovávat jméno, příjmení,
e-mail a domovskou stránku:
class CUdaje
{
var $jmeno, $prijmeni, $email, $homepage;
}
Nyní již máme vytvořenou třídu, a proto můžeme vytvářet její instance - objekty:
$udaje = new CUdaje;
Operátor new
zajistil alokaci
paměti pro proměnnou $udaje
, která nyní tvoří objekt -
instanci třídy CUdaje
. K jednotlivým členským proměnným třídy
se přistupuje pomocí operátoru ->
. Např.
$udaje->jmeno = "Pepík";
$udaje->prijmeni = "Novák";
$udaje->email = "";
$udaje->homepage = "http://neco.nekde.cz";
Další práce s objektem je stejná jako s každou jinou proměnnou:
echo $udaje->jmeno;
Vytiskne: Pepík
Členské proměnné je možné přímo při jejich definici i zinicializovat:
class CUdaje
{
var $jmeno = "Pepík", $prijmeni;
}
$udaje = new CUdaje;
echo $udaje->jmeno;
echo $udaje->prijmeni;
První příkaz echo
vytiskne:
Pepík
Druhý příkaz echo
nevytiskne nic, protože $udaje->prijmeni
zatím nebylo zinicializováno.
-
Členské funkce
Členské funkce se většinou definují pro manipulaci s daty uvnitř objektu. Definici členské funkce si ukážeme na předchozím příkladu, do kterého doplníme členskou funkci, která bude mít za úkol vytisknout data:
class CUdaje
{
var $jmeno, $prijmeni, $email, $homepage;
function vytiskni()
{
echo $this->jmeno." ".$this->prijmeni.":
";
echo $this->email.", ".$this->homepage;
}
}
Speciální proměnná
$this->členská proměnná
se používá pro přístup ke členské
proměnné uvnitř členské funkce. Obsah této proměnné je při zavolání
funkce nahrazen objektem, ze kterého je funkce volána.
Př.
$udaje = new CUdaje;
$udaje->jmeno = "Pepík";
$udaje->prijmeni = "Novák";
$udaje->email = "";
$udaje->homepage = "http://neco.nekde.cz";
$udaje->vytiskni();
Výsledek tohoto skriptu bude: Pepík Novák:
, http://neco.nekde.cz
Členské funkce mohou jako každé jiné samozřejmě obsahovat i parametry.
-
Konstruktory
Konstruktor představuje speciální členskou
funkci, která má shodný název s názvem třídy. Konstruktor je zavolán při
každém vytváření objektu pomocí operátoru new
. Nejčastěji
se využívá pro snadnější inicializaci objektu. Vše si opět předvedeme
na našem příkladu:
class CUdaje
{
var $jmeno, $prijmeni, $email, $homepage;
function CUdaje($jmeno, $prijmeni, $email, $homepage)
{
$this->jmeno = $jmeno;
$this->prijmeni = $prijmeni;
$this->email = $email;
$this->homepage = $homepage;
}
function vytiskni()
{
echo $this->jmeno." ".$this->prijmeni.":
";
echo $this->email.", ".$this->homepage;
}
}
$udaje = new CUdaje("Pepík", "Novák",
"", "http://neco.nekde.cz");
$udaje->vytiskni();
Efekt bude úplně stejný jako u předchozího
příkladu. Definicí standardních hodnot lze konstruktor ještě vylepšit,
protože objekt pak půjde vytvořit ještě před tím, než budeme znát jeho
hodnoty. S tímto vylepšením přibude více možností inicializace objektu.
- Dědičnost
Dědičnost je možnost vytvořit novou třídu,
která zdědí všechny členské proměnné a členské funkce z nějaké jiné
třídy. V nově vytvořené třídě pak můžeme definovat další členské
proměnné a funkce. Opět si vše předvedeme na našem příkladu, tentokrát
si ho modifikujeme tak, že ve třídě budeme chtít mít uloženo jméno, příjmení,
e-mail, domovskou stránku a oblíbenou barvu. Využijeme při tom již
definované třídy CUdaje
. Vytvoříme si novou třídu CUdaje_a_barva
,
která bude potomkem třídy CUdaje
:
class CUdaje_a_barva extends CUdaje
{
var $barva;
}
$nove_udaje = new CUdaje_a_barva;
$nove_udaje->barva = "modrá";
$nove_udaje->jmeno = "Pepík";
$nove_udaje->prijmeni = "Novák";
$nove_udaje->email = "";
$nove_udaje->homepage = "http://neco.nekde.cz";
$nove_udaje->vytiskni();
V tomto případě se ovšem nikde nevytiskne
žádná oblíbená barva, protože funkce vytiskni()
je zděděná
ze třídy CUdaje
, ve které není o žádné oblíbené barvě ani
zmínka. V nově vytvořené třídě by bylo vhodné rovněž vytvořit
konstruktor, který by byl schopen obsluhovat všechny údaje:
class CUdaje_a_barva extends CUdaje
{
var $barva;
function CUdaje_a_barva($barva, $jmeno, $prijmeni, $email, $homepage)
{
$this->CUdaje($jmeno, $prijmeni, $email, $homepage);
$this->barva = $barva;
}
function vytiskni()
{
echo $this->jmeno." ".$this->prijmeni.":
";
echo $this->email.", ".$this->homepage.",
".$this->barva;
}
}
$nove_udaje = new CUdaje_a_barva("modrá", "Pepík",
"Novák",
"", "http://neco.nekde.cz");
$nove_udaje->vytiskni();
Při definování konstruktoru
jsme využili zděděný konstruktor ze třídy CUdaje
. Konstruktor
třídy CUdaje_a_barva
nyní zavolá původní konstruktor ze třídy
CUdaje
a sám zinicializuje pouze proměnnou pro oblíbenou barvu.
Také jsme zde nadefinovali novou členskou funkci vytiskni()
, která
již vytiskne i údaje o oblíbené barvě.
Myslím, že objektů již bylo dost, v příštím článku se seznámíme s regulárními výrazy.
Obsah seriálu (více o seriálu):
- PHP část I. - Úvod do jazyka
- PHP část II. - Instalace
- PHP - Část V. (Operátory)
- PHP - Část VIII.
- PHP - Část IX. (Vlastní funkce)
- PHP - Část X. (Proměnné ve funkcích)
- PHP - Část XI.
- PHP - Část XII. (Regulární výrazy)
- PHP - Část XIII. (Regulární výrazy podruhé)
- PHP - Část XIV. (PHP a databáze)
- PHP - Část XV. (Instalace MySQL ve Windows)
- PHP - Část XVI. (Instalace MySQL na LINUXu)
- PHP - Část XVII. (MySQL - vytvoření nové databáze)
- PHP - Část XVIII. (Vkládání dat do databáze)
- PHP - Část XIX. (MySQL - získávání dat z databáze)
- PHP - Část XX. (SQL - získávání dat z databáze II.)
- PHP - Část XXI. (SQL - získávání dat z databázových tabulek III)
- PHP - Část XXII. (MySQL - modifikace a mazání dat v tabulce)
- PHP část XXIII. - MySQL - přístupová práva
- PHP část XXIV. - PostgreSQL
- PHP část XXV. - Cookies
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007