Objekty v PHP 5 – 2. díl

V objektovém programování pomocí PHP 5 používáme k definování jednotlivých kroků specifické příkazy, z nichž se dnes seznámíme s funkcí konstant, statických dat, abstraktních dat a jejich funkčními rozdíly.

Statické členy

Každý datový člen, který je členem statickým, existuje pouze pro jednu třídu a je na objektu nezávislý. Definujeme jej i v případech, kdy neexistuje žádný objekt dané třídy. Proto není takto vytvořený datový člen součástí vytvořených objektů. K jeho tvorbě stačí použít klíčové slovo „static“:

<?php
class trida
{
  public static $StatickyDatovyClen = `ahoj`;
 
  public static function StatickaMetoda()
  {
    echo `volání statické metody`;
  }
}
 
trida::StatickaMetoda(); // statické volání
?>

Krom toho je samozřejmě možné statické datové členy je možné použít tam, kde mám informace vážící se ke třídě a ne k objektu. Například jak v tomto počítadle vytvořených objektů:

<?php
class trida
{
  public static $pocet = 0;
 
  function __construct()
  {
    ++trida::$pocet;
  }
}
 
$objekt1 = new trida;
$objekt2 = new trida;
 
echo `Celkově je vytvořeno `,trida::$pocet,` objektů.`;
?>

Konstanty

Konstanta se chová jako statický datový člen, který nemění své hodnoty a patří k určité třídě. Od běžných proměnných se odlišuje tím, že v definici, ani při použití, se nepoužívá znak $. Konstantě navíc není možné přidat vlastnosti přístupu private, protected nebo public. Například:

<?php
class math
{
  const cislo_pi = 3.14;
  const cislo_e = 2.718;

  public function ukaz_pi()
  {
    return self::cislo_pi;
  }
}
 
echo `pi = `,math::cislo_pi,`<br>`;
 
$objekt = new math;
echo `pi = `,$objekt->ukaz_pi(),`<br>`;
?>

Abstraktní třídy a metody

Kromě statických dat je možno v PHP 5 používat i data abstraktní. Jejich smyslem je definovat nějakou funkci v době, kdy ještě nejsou známy konkrétní detaily pro její funkci. Abstraktní třída tak sice může obsahovat abstraktní metody, ale ty nejsou definovány žádným kódem. Slouží pouze k tomu, aby ji bylo možné překrýt konkrétním kódem potomka třídy.

Příkladem může být abstraktní třída, která bude představovat nějaké zvíře. Tato třída může mít abstraktní metodu „NakresliSe“, která příslušné zvíře vykreslí. Protože tato metoda ale neví, o jaké konkrétní zvíře se jedná, tak ani neví, jaké nakreslit. Metoda „NakresliSe“ je totiž abstraktní (bez kódu) a my budeme spoléhat na to, že potomci třídy zvíře dodají kód pro jeho zakreslení. Potomek třídy zvíře může být třeba třída pes, u níž už víme, že bude zakreslen pes, jako například:

<?php
abstract class zvire
{
  abstract public function NakresliSe();
}
 
class pes extends zvire
{
  public function NakresliSe()
  {
    echo `kreslím psa<br>`;
  }
}
 
$objekt = new pes;
$objekt->NakresliSe();
?>

Abstraktní třídy tedy definujeme ty třídy ve stromu dědičnosti, u kterých nepředpokládáme, že bychom nich vytvářeli objekty. Použití klíčového slova „abstract“ přesně zdokumentujeme, které třídy jsou abstraktní. U ostatních nám kompilátor kontroluje, zda obsahují abstraktní metody. PHP však kontroly provádí až za běhu programu a nikoliv v době kompilace.

Diskuze (5) Další článek: Oživeno: Ztratily se vám v ICQ všechny kontakty? Nejste sami!

Témata článku: Software, Programování, PHP, Public, Objekt, Díl, Pes, Echo

Určitě si přečtěte


Aktuální číslo časopisu Computer

Jak vznikají filmové efekty

Test ATX skříní a externích disků

Znáte svá práva při reklamaci?

Průvodce první instalací NASu