PHP - Část XI. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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):

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: