OOP v PHP: Statické vlastnosti a metody

15. února 2006

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.

Předchozí článek OOP v PHP: Viditelnost
Štítky: oop-php

Mohlo by vás také zajímat

Nejnovější

4 komentářů

  1. Joey

    Zář 8, 2011 v 7:47

    $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ý.

    Odpovědět
  2. Alt+F4

    Pro 6, 2011 v 12:39

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

    Odpovědět
  3. Jan

    Srp 19, 2012 v 20:41

    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
    • Adriana

      Čvn 8, 2017 v 11:40

      Pridajte si tento kód, viacej krát pod seba
      $instance = new Trida();
      echo $instance->id;
      echo $instance->id_nestaticke;

      Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *