PHP 5 umožňuje definovat vlastnostem i metodám viditelnost pomocí zvláštních klíčových slov. PHP tedy dělí atributy (vlastnosti) a metody na public, protected a private.

Vlastnost nebo metoda určená pomocí public je přístupná všem uživatelům třídy.

Klíčové slovo protected (z anglického “chráněný”) před metodou nebo vlastností třídy znamená, že je vlastnost přístupná uživatelům třídy (rodiče) a podtřídy, která tuto třídu dědí.

Soukromá metoda nebo vlastnost předznačená klíčovým slovem private je přístupná pouze uvnitř třídy.

Viditelnost není nutné definovat, pokud tak neučiníte, pak nabývá implicitní hodnoty public.

<?php 

  class Trida{ 
  public $verejna = 'Veřejná'; 
  protected $chranena = 'Chráněná'; 
  private $soukroma = 'Soukromá'; 

    function volatVlastnosti(){ 
    echo $this->verejna; 
    echo $this->chranena; 
    echo $this->soukroma; 
    } 
  } 

$instance = new Trida(); 
$instance->volatVlastnosti(); 
echo $instance->verejna; 
//echo $instance->chranena; 
//echo $instance->soukroma; 

?>

Jak tato instance funguje? Když voláme metodu $instance->volatVlastnosti(), vypíší se všechny vlastnosti definované uvnitř metody volatVlastnosti() (uvnitř rodičovské třídy jsou všechny vlastnosti viditelné), když však voláme jednotlivé vlastnosti postupně, dochází k několika změnám.

Zápis echo $instance->verejna; bude bez problémů fungovat, vlastnost je veřejná, můžeme ji volat kdekoli. Zápisy echo $instance->chranena; a echo $instance->soukroma; budou nefunkční, nejsou viditelné mimo třídu.

Přidejme k našemu zápisu nového potomka třídy:

<?php 
class TridaDedi extends Trida{ 
    function volatVlastnosti(){ 
    echo $this->verejna; 
    echo $this->chranena; 
    echo $this->soukroma; 
    } 
  } 
   
$instance = new TridaDedi(); 
$instance->volatVlastnosti(); 
echo $instance->verejna; 
echo $instance->soukroma; 
?>

Metoda $instance->volatVlastnosti() vypíše pouze vlastnosti $instance->verejna; a $instance->chranena;, zápis echo $instance->verejna; bude bez problémů funkční, echo $instance->soukroma; nevypíše nic. Kdybychom chtěli podobným způsobem volat i chráněnou vlastnost, celý skript by skončil fatální chybou. Stejná pravidla platí i pro metody.

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

1 Příspěvěk v diskuzi

  1. Při zdědění třídy volám její funkce přes parrent::metoda ale parametry volám pořád this->parametr? Znamená to tedy, že pokud pojmenuji proměnou stejně tak jí přetížím?

Odpovědět