OOP v PHP: Viditelnost
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.
Mohlo by vás také zajímat
-
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023 -
Proč je důležité tvořit obsah na váš web?
29. srpna 2024 -
AI na dosah ruky: Jak je to s AI v osobních zařízeních?
22. ledna 2024
Nejnovější
-
Co je to GPSR a jak ovlivní české e‑shopy?
28. ledna 2025 -
Apple jde naproti práci s HDR monitory!
17. ledna 2025 -
Jak využít AI potenciál svého Macu?
9. ledna 2025
Joey
Říj 3, 2011 v 18:51Př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?