Reklama

interval.cz

OOP v PHP: Viditelnost

15. 02. 2006 | Jakub Mrozek | PHP | Komentáře: 1

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.


Další aktuální články na interval.cz

Tematicky související články

Dejte vědět i ostatním o článku

Komentáře ke článku

Přidat nový komentář

Joey

Autor komentáře: Joey

Datum vložení: 03. Říjen 2011, 18:51:20

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?

Zpět na začátek komentářů | Zpět na začátek článku

Přidat nový komentář

Jméno a e-mail jsou nepovinné. Příspěvky obsahující odkaz jsou moderovány.

Reklama
Reklama

Syndikace

hledáme nové autory | redakce interval.cz | reklama na interval.cz

© ZONER software, a.s., všechna práva vyhrazena. Hosting zajišťuje CZECHIA.COM. SSL certifikáty pro domény. Powered by WordPress.