OOP v PHP
V PHP môžete písať kód aj v objektovo orientovanom štýle (Object-Oriented Programming – objektovo orientované programovanie) – OOP. OOP je o vytváraní objektov, ktoré obsahujú údaje aj funkcie.
Výhody objektovo orientovaného programovania:
- OOP umožňuje vytvárať plne opätovne použiteľné aplikácie s menším množstvom kódu a kratším časom vývoja
- OOP pomáha udržiavať kód PHP v suchu „Neopakujte sa“ a uľahčuje údržbu, úpravu a ladenie kódu
- OOP je rýchlejšie a jednoduchšie na vykonanie
- OOP poskytuje jasnú štruktúru programov

Class (trieda) je šablóna pre objekty. Keď sú vytvorené jednotlivé objekty (jablko, banán atď.), zdedia všetky vlastnosti a správanie z triedy ovocie, ale každý objekt bude mať iné hodnoty vlastností.
Trieda je definovaná pomocou class kľúčového slova, za ktorým nasleduje názov triedy a pár zložených zátvoriek ({})
Triedy nie sú ničím bez objektov. Z triedy môžeme vytvoriť viacero objektov. Každý objekt má všetky vlastnosti a metódy definované v triede, ale budú mať rôzne hodnoty vlastností.
Objekty triedy sa vytvárajú pomocou kľúčového slova new.
<?php
class Fruit {
// Properties
public $name;
public $color;
// Methods
function set_name($name) {
$this->name = $name;
}
function get_name() {
return $this->name;
}
function set_color($color) {
if ($color== '') $this->color = 'red'; // nastavenie predvolenej hodnoty
else $this->color = $color;
}
function get_color() {
return $this->color;
}
}
$apple = new Fruit();
$apple->set_name('Apple');
$apple->set_color('');
echo "Meno: " . $apple->get_name();
echo "<br>";
echo "Farba: " . $apple->get_color();
?>
__construct()funkciu voláme, keď vytvoríte objekt z triedy. Funkcia konštrukcie začína dvoma podčiarkovníkmi (__)!
V príklade nižšie vidíme, že použitie konštruktora je to isté ako volanie metódy set_name() a šetrí nás od volania a vytvárania nových funkcií a znižuje tak množstvo kódu:
function __construct($name) {
$this->name = $name;
}
function set_name($name) {
$this->name = $name;
}
Ak vytvoríte __destruct()funkciu, PHP túto funkciu automaticky zavolá na konci skriptu. Deštruktor sa teda volá, keď je objekt zničený alebo skript je zastavený alebo ukončený.
function __destruct() {
echo "The fruit is {$this->name} and the color is {$this->color}.";
}
Modifikátory prístupu:
Vlastnosti a metódy môžu mať modifikátory prístupu, ktoré riadia, kde k nim možno pristupovať.
Existujú tri modifikátory prístupu:
public– vlastnosť alebo metóda sú dostupné odkiaľkoľvek. Toto je predvolené nastavenieprotected– k vlastnosti alebo metóde možno pristupovať v rámci triedy a tried odvodených z tejto triedyprivate– vlastnosť alebo metóda je prístupná LEN v rámci triedy
Dedičnosť
Podradená trieda zdedí všetky verejné a chránené vlastnosti a metódy od nadradenej triedy. Zdedená trieda je definovaná pomocou extends kľúčového slova.
// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
public function message() {
echo "Am I a fruit or a berry? ";
}
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message(); // toto je vlastná funkcia Strawberry
$strawberry->intro(); // toto je zdedená funkcia od Fruit
Konštatanty
Konštanty sa po deklarovaní nedajú zmeniť. Konštanty triedy môžu byť užitočné, ak potrebujete definovať nejaké konštantné údaje v rámci triedy. Konštanta triedy je deklarovaná v triede pomocou const kľúčového slova. V triedových konštantách sa rozlišujú malé a veľké písmená. Konštanty sa však odporúča pomenovať všetkými veľkými písmenami.
Ku konštante môžeme pristupovať mimo triedy pomocou názvu triedy, za ktorým nasleduje operátor rozlíšenia rozsahu ( ::), za ktorým nasleduje názov konštanty, ako napríklad tu:
class Nazov_stranky {
const MOJA_STRANKA = "areaweb2.pppcreative.sk";
}
echo nazov_stranky::MOJA_STRANKA;
Statické metódy
Statické metódy je možné volať priamo – bez toho, aby ste najprv vytvorili inštanciu triedy.
Statické metódy sú deklarované static kľúčovým slovom:
Na prístup k statickej metóde použite názov triedy, dvojitú dvojbodku (::) a názov metódy:
<?php
class ClassName {
public static function staticMethod() {
echo "Hello World!";
}
}
?>
ClassName::staticMethod();
Trieda môže mať statické aj nestatické metódy. K statickej metóde je možné pristupovať z metódy v rovnakej triede pomocou self kľúčového slova a dvojitej dvojbodky (::):
self::welcome();
Statické metódy možno volať aj z metód v iných triedach. Na tento účel by mala byť statická metóda public:
Ak chcete volať statickú metódu z podradenej triedy, použite parent kľúčové slovo v podradenej triede. Tu môže byť statická metóda public alebo protected.
public function __construct() {
$this->websiteName = parent::getWebsiteName();
}
Statické vlastnosti
Statické vlastnosti je možné volať priamo – bez vytvárania inštancie triedy.
Statické vlastnosti sú deklarované static kľúčovým slovom:
<?php
class ClassName {
public static $staticProp = "W3Schools";
}
ClassName::$staticProp;
?>
namespace Code
use Code\Html
Namespace umožňuje použiť rovnaký názov pre viac ako jednu triedu. Umožňujú tak lepšiu organizáciu zoskupením tried.
Aby som všade nemusel používať Code\Html ale len Html môžem si definovať an začiatku use Code\Html.