Termín OOP znamená objektově orientované programování (dále už jen OOP), což je způsob programování, kdy chápeme procesy jako entity. Tedy zkráceně řečeno, nepotřebujeme vědět, jak daný program funguje, ale musíme vědět, jak tento program používat.

Na rozdíl od procedurálního programování, v OOP jsou data a funkce navzájem svázány do struktury, nazývané objekt. Třída je šablonou objektu, volání třídy se pak označuje jako instance. Pojmy instance a objekt jsou v podstatě synonyma. Často však mluvíme o konkrétním objektu jako o instanci, termín objekt se používá, pokud mluvíme o objektech obecně. S oblibou pak rozdíl mezi objektem a třídou vysvětluji tak, že objekt je vyjádřením třídy v reálném světě (i když to může být trochu zavádějící).

Jak napsat svoji první třídu? Definice třídy se skládá z klíčového slova class následovaného názvem třídy a párem složených závorek. Název třídy může být cokoli s výjimkou vyhrazených slov.

Je asi vhodné zmínit se hned na začátku o konvencích v pojmenování tříd. Pojmenování tříd se řídí takzvanou velbloudí notací (camel caps) – každé slovo v názvu třídy začíná velkým písmenem, ostatní jsou malá. Podívejme se, jak může vypadat naše první třída:

<?php 
  class Trida{} 
?>

Třídu vždy ukládejte do samostatného souboru. Není to přímo podmínkou (jako třeba v Javě), ale má to své výhody, jak poznáte v budoucnosti. Soubor pak pojmenujte stejně jako třídu, v našem případě Trida.php.

Definici třídy tvoří atributy a metody. Atributy prozatím chápejme jako klasické proměnné a metody jako funkce.

Některé metody třídy mají zvláštní pojmenování a mají jen určitý význam. Takové metody začínají předponou __ (dvě podtržítka). Nejpoužívanější takovou metodou je konstruktor. Konstruktor je metoda, která se vykoná při vytváření každé instance třídy (každém volání třídy). Konstruktor provádí operace prvotního nastavení třídy. Podívejte se na následující příklad:

<?php 
  class Trida{ 
  private $vek; 
    public function __construct($vek){ 
    $this->vek = $vek; 
    } 
   
    public function kolikJeVamRoku(){ 
    return $this->vek; 
    } 
  } 
$volani_tridy = new Trida(20); 
echo $volani_tridy->kolikJeVamRoku(); 
?>

Zápis private $vek označuje definici atributu $vek. Klíčové slovo private označuje viditelnost (viditelnost je vysvětlena jinde – prozatím stačí vědět, že jsme definovali atribut třídy). Dále public function __construct() znamená volání konstruktoru třídy Trida. Tato metoda způsobí, že atributu $vek je přiřazena hodnota $vek. Metoda public function KolikJeVamRoku() vrací hodnotu atributu $vek.

Pojmenování metod a atributů se opět řídí velbloudí notací, ovšem s tím rozdílem, že první písmeno je mále. Zápis $this->atribut v lidské řeči znamená „odkazuji na atribut $atribut ze současné třídy“. Zapamatujte si, že $this je pseudoproměnná, která se odkazuje na aktuální instanci, tedy na instanci, ve které se nachází! Pokud byste takto atribut volali mimo třídu, program by skončil fatální chybou.

Možná vás zaujalo klíčové slovo new. Co to znamená? Právě takto se vytváří nová instance třídy. Zápis $volani_tridy = new Trida(20); tedy znamená „vytvoř novou instanci třídy Trida a rovnou předej hodnotu 20 konstruktoru“. Konstruktor, stejně jako ostatní metody, může používat i nepovinné parametry:

<?php 
  class Trida{ 
  private $vek; 
    public function __construct($vek = 20){ 
    $this->vek = $vek; 
    } 
   
    public function kolikJeVamRoku(){ 
    return $this->vek; 
    } 
  } 
$volani_tridy = new Trida(); 
echo $volani_tridy->kolikJeVamRoku(); 
?>

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

7 Příspěvků v diskuzi

  1. Je to peknej clanek, chtel bych si ho vytisknout, akorat tu chyby verze pro tisk…. Skoda…. Nebo se to snad nejak dá?….

  2. Výborné! Asi jsem neviděl tak srozumitelný výklad základů OOP. Na malém prostoru je vysvětlena filosofie OOP i s příklady.

  3. Proc?! Proc je OOP lepsi? Nechapu…
    Vzdyt ten posledni priklad se da mnohem jednoduseji napsat bez OOP:

    function kolikJeVamRoku(){
    return 20;
    }
    echo kolikJeVamRoku();

    a ten prvni:

    function kolikJeVamRoku($vek){
    return $vek;
    }
    echo kolikJeVamRoku($vek);

    Na co je OOP vlastne dobry?!

    • OOP je vhodné používat pro složitější programy. Tyto příklady jsou jednoduché skripty, které slouží pouze pro vysvětlení základů OOP PHP. Těžko Vám bude někdo vysvětlovat základy na rozsáhlém programu, kde by jste se už ze začátku ztratila. Článek je perfektní! :) Díky

Odpovědět