Triedy z externých zdrojov
Na tejto prednáške si ukážeme ďalšie praktické využite jazyka OOP a to je využitie tried z exterých zdrojov. Externý zdroj bude v našom prípade predstavovať nič iné ako samotný súbor php, ktorý si do kódu našej stránky načítame (include). Na čo to je teda dobré?
Spomeňte si, ako často sme na prednáškach alebo v ukážkach kódu potrebovali narýchlo vypísať obsah premenných, najmä keď sa jednalo o pole alebo o objekty. Najčitateľnejšie bolo pole vypísať do elementu pre (preformátovaný text). Toto vypísanie sme opakovali dosť často, jednalo sa najmenej o tri riadky (niekedy aj viac, keď bolo potrebné pridať aj nejaké prázdne riadky pred a za pomocou br). Poukázal by som na slovo opakovali.
Ako vieme, základom programovania je čo najmenej vecí zbytočne opakovať, resp. si život uľahčovať (zjednodušovať). Uľahčovaním myslíme v tomto prípade opakované písanie troch a viacerých riadkov pre jednoduché zorbazenie obsahu premennej pre testovacie účely. Akoby sme si to mohli uľahčiť? No veľmi jednoducho – rovnako ako vždy, keď niečo potrebujeme vykonať viackrát. Vytvoríme si na to funkciu a tú potom budeme len volať, pre potrebu si pošleme parametre, aké treba.
Vzhľadom k tomu, že si preberáme objektové programovanie, táto metóda by nemala byť len tak pohodená, ale mala by byť súčasťou nejakej triedy. My si teda vytvoríme nový súbor, ktorý si do stránky index.php includneme. V danom súbore budeme mať deklaráciu triedy, ktorú si nazveme Helper (pomocník) a zadeklarujeme si v nej metódu s názvom PrintArray (vypíš pole), ktorá pomocou načítania parametra vypíše pole do elementu pre. Mohlo by to vyzerať asi takto:
helper.php:
<?php
class Helper{
function printArray($array){
echo '<br><br>Obsah pola vypisany metodou PrintArray :<br><pre>';
print_r($array);
echo '</pre><br><br>';
}
}
?>
Ako vidíte, zadefinovali sme jednoduchú triedu s jednou metódou, ktorá nám vypíše na obrazovku voľné riadky pred a za element pre, v ktorom sa spustí príkaz print_r a vypíše obsah pola, ktorý nám príde ako parameter. Teraz si tento súbor musíme vložiť do súboru index.php pomocou príkazu include. Následne si vytvoríme objekt tejto triedy, ktorý si môžeme poslať kdekoľvek, kde ho potrebujeme využiť. My si chceme názorné použitie ukázať na výpise property users v triede UserList z minulej prednášky (obsah poľa objektov User a UserOwner). Aby sme mali tento helper po ruke v celej tejto triede, vytvoríme tejto triede novú property s názvom helper a cez konštruktor (ktorý pridáme do tejto triedy) si prepošleme tento objekt triedy Helper a priradíme ho do property. Následne cez túto proprety môžeme volať metódu printArray na danom mieste. Malo by to vyzerať asi takto:
index.php ():
…
(includnutie súboru helper.php)
<body>
<?php
$actual_page = "index";
include "helper.php";
$helper = new Helper();
?>
<div class="main">
…
(pridanie property a konštruktor triedy UserList)
class UserList{
public $users = array();
public $search_keyword = '';
public $sort_by = 'id';
public $sort_type = 'ASC';
public $helper = null;
function __construct($helper){
$this->helper = $helper;
}
function loadData($db_connection){
…
(zavolanie metóda z helpra)
}
$this->helper->printArray($this->users);
echo 'Objekt triedy User method_exists($this->users[1], "remindOwnerByMail") : '.method_exists($this->users[1], "remindOwnerByMail")."<br>";
…
(volanie konštruktora s helprom)
$user_list = new UserList($helper);
//SPRACOVANIE FILTROVANIA
…
Ako vidíte po spustení tohto kódu, výsledok na obrazovke vyzerá rovnako ako predtým. Ak by sme ale v tomto prípade chceli hocikde ešte nejaké pole vypísať, docielime to jednoduchým a rýchlom zavolaním tejto metódy objektu helper, kde si iba ako parameter prepošleme požadované pole.
Tento príklad je dosť dôležitý, resp. užitočný z viacerých dôvodov. Nie náhodou sme nazvali danú triedu ako helper (pomocník). V informačných systémoch a komerčných frameworkoch (frejmoworkoch – dostaneme sa k tomu o pár prednášok, čo to je) sa týmto slovom všeobecne nazývajú súbory alebo triedy, ktoré slúžia na takéto účely. Sú to jednoducho pomocníci. Sú v nich vo väčšine definované takéto menšie funkcie, ktoré potrebujeme v systéme viackrát a zjednodušujú nám prácu v kóde. Využitie majú rôzne, my sme mali metódu, ktorá nám vypisovala obsah poľa, mohli by sme mať metódu, ktorá by nám napríklad po preposlaní poľa vypísala obsah poľa rovno do tabuľky (elementy table td tr...), funkciu na prepočet meny (peniaze), funkciu na prepočet dátumu z nášho formátu na americký (AM,PM) a podobne.
V podstate, niektoré funkcie z jazyka PHP, ktoré sme sem tam použili sú akokeby takým helprom, vedeli by sme to spraviť bez nich, ale zavolaním funkcií to spravili za nás a rýchlejšie. Takto sa to v praxi používa a robí, ak potrebujeme niečo, napríklad prepočítať peniaze z jednej meny na druhú, spravíme si funkciu v nejakom objekte (helper) a zavoláme ju. Toto isté urobíme na viacerých miestach, všade, kde to budeme potrebovať. Vždy, keď budeme potrebovať spraviť niečo, kde je šanca, že by sme to mohli ešte potrebovať na inom mieste a viackrát, je najlepšie si to hneď hádzať do funkcie do nejakého svojho interného helpra.
Druhý dôvod, prečo je takéto niečo výhodné, resp. je to v podstate výhodou OOP je, že sa takýmito triedami a všeobecne triedami iného použitia môže nejaký informačný systém veľmi ľahko rozširovať. Predstavme si informačný systém, niečo ako naša webstránka len troška väčšie. Obsahoval by viacero súborov, v ktorých by boli takto definované triedy rôzneho druhu. Napríklad v jednom súbore by boli triedy, ktoré by reprezentovali dáta v databáze (ako v našom prípade User a UserList), v druhom by boli dáta z DB iných tabuliek, iný súbor by mal pomocné triedy (helpre) a podobne.
Takto nejako môže byť zložený aj samotný počítačový program, ktorý sa dá spustiť v operačnom systéme alebo aj nejaká dostupná webová aplikácia. Keďže je štruktúra kódu takto pekne podelená, je veľmi ľahké (relatívne – skôr ľahšie) daný systém opravovať, meniť alebo rozširovať. Ak je niečo zlé, stačí nájsť presne súbor, resp. triedu, ktorá chybu spôsobuje a opraviť to. Nie je nutné meniť množstvo kódu a hľadať v súboroch, ktoré majú tisícky riadkov. Najmä čo sa týka vylepšenia, resp. rozšírenia systému, je to veľmi jednoduché. Stačí len vytvoriť súbor s novými triedami alebo len nové triedy pridať do existujúcich súborov a následne ich je možné v kóde používať a využívať.
Jasné, že podobnú funkcionalitu by sme rovnakým spôsobom nadobudli aj bez OOP, jednoduchým zadeklarovaním funkcií a premenných v externom súbore. Po inkludnutí by sme ich mohli rovnako využívať. Bavíme sa ale o OOP a tak si to ukazujeme ako sa to využíva aj v praxi.