PHP nám dovoluje definovat metodu nebo vlastnost jako statickou. Znamená to, že se váže na třídu a nikoli na danou instanci. Statická metoda se definuje frází „static“, které se uvádí po klíčových slovech viditelnosti.

Ke statické metodě či vlastnosti není možné přistupovat pomocí pseudoproměnné $this. Statické metody voláme pomocí zápisu JménoTřídy::StatickáMetoda(), vlastnosti pomocí syntaxe JménoTřídy::$StatickáVlastnost.

Pokud chceme přistupovat ke statickým metodám či vlastnostem uvnitř třídy, používáme místo jména třídy klíčová slova self:: nebo parent::.

Následující příklad přiřadí každé instanci jedinečné ID:

<?php 

  class Trida{ 
  public static $pocitadlo = 0; 
  public $id; 
  public $pocitadlo_nestaticke = 0; 
  public $id_nestaticke; 
   
    public function __construct(){ 
    $this->id = self::$pocitadlo++; 
    $this->id_nestaticke = $this->pocitadlo_nestaticke++; 
     
    } 
  } 
   
$instance = new Trida(); 
echo $instance->id; 
echo $instance->id_nestaticke; 


$instance = new Trida(); 
echo $instance->id; 
echo $instance->id_nestaticke; 

?>

Příklad vypíše čtyři čísla (0010), $instance->id bude mít vždy jinou hodnotu, u $instance->id_nestaticke bude vždy hodnota stejná.

Pozn. red.: Zdůrazňujeme, že tento text se týká PHP 5.

4 Příspěvků v diskuzi

  1. $this->id = self::$pocitadlo++;;; tento řádek znamená, že nejdříve se uloží do id = 0 a až následně se zvýší o 1? Jedná se tedy o postfix?
    Díky za odpověď, nejsem si jistý.

  2. Víceméně to tak je. I když ve skutečnosti se fakticky ukládá přímo 1. Jinak nejedná se o postfix, ale postinkrement. Další možnosti jsou postdekrement ($i–), preinkrement (++$i) a překvapivě predekrement (–$i).

  3. Chcem sa spytat ako teda ovplyvnuje ta statická premenna vysledok pretoze to skusam a stale vyde to iste bez static a aj s. dakujem

Odpovědět