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
-
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023 -
Fandíme českým sportovcům a rozdáváme hosting ZDARMA!
26. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
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?