Objektové programování v PHP 5
Seriál Jakub Mrozka „OOP v PHP“ je tím nejucelenějším zdrojem informací, který o objektově orientovaném programování v PHP 5 v českém jazyce najdete. Ačkoliv na serveru Interval.cz vycházel v roce 2006, informace jsou stále aktuální.
Základy OOP
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.
Dědičnost
Občas chceme vytvořit třídu podobnou té, kterou už máme definovánu. Bylo by naprosto zbytečné, kdybychom vše přepisovali – stačí pozměnit pouze stávající třídu. Proces, kdy vytváříme novou třídu, která přebírá libovolné metody a atributy, se právě nazývá dědičnost.
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.
Statické vlastnosti a metody
PHP nám dovoluje definovat metodu nebo vlastnost jako statickou. Znamená to, že se váže na třídu a nikoli na danou instanci. Statická metoda se definuje frází „static“, které se uvádí po klíčových slovech viditelnosti.
Klíčové slovo final
PHP 5 používá klíčové slovo final pro ochranu
rodičovských tříd, aby nemohly být přepsány jejich potomky. Final může
být použito před jménem třídy nebo metody.
Speciální metody
PHP 5 obsahuje zvláštní metody, které provádějí určitou speciální
činnost, pro niž byly zvlášť navrženy. Mezi základní takové metody
patří __destruct(), __clone() a
__construct().
Autoloading
Velmi užitečnou funkcí je funkce __autoload(). Umožňuje
takzvané automatické nahrávání tříd a je volána, jestliže chcete užít
třídu, která ještě nebyla definována.
Objektové konstanty
Uvnitř třídy je možné definovat objektovou konstantu. Odlišnost od vlastnosti třídy spočívá v tom, že se hodnota konstanty nikdy nemění, neuvádí se znakem $ a neváže se k instanci, ale k příslušné třídě.
Operátor dvojitá dvojtečka
Oficiální název operátoru :: je „Paamayim Nekudotayim“
(hebrejský výraz pro dvě dvojtečky), mohl by být nazýván také
„oblastní operátor“, případně „dvojitá dvojtečka“.
Objektové rozhraní
Objektové rozhraní lze charakterizovat jako šablonu vzoru. Pokud vytváříte velké třídy, které zahrnují a volají další třídy na základě různých okolností, občas se může stát, že budete volat metodu, která není nikde definovaná. Abychom předcházeli takovým chybám, PHP 5 umožňuje specifikovat objektové rozhraní.
Abstraktní třída
Abstraktní třída (abstrakce) je třída, která obsahuje jak abstraktní metody, tak hotové metody. Abstraktní třídy nesmí vytvářet instance, mohou být ale děděny a jejich potomci po implementaci potřebných metod instance vytvářet mohou. Metody označené jako abstraktní nemohou definovat obsah, pouze specifikují název a případné argumenty.
Vzor Factory
Takzvaný „vzor Factory“ umožňuje jednoduché vytváření objektů uvnitř jiných tříd.
Vzor Singleton
Návrhový vzor Singleton umožňuje vytvářet objekty, u nichž je zaručena jejich unikátnost. Znamená to, že díky tomuto vzoru je možné objekt volat vždy pouze jednou.
Přetěžování
Metody přetěžování jsou volány v případě, že zadáváte vlastnost nebo metodu, která není definována.
Iterace (opakování)
Iterace (volně přeloženo jako opakování, cyklus opakování) umožňuje přístup k objektům jakoby k polím.
Typová kontrola
Typová kontrola znamená, že argumenty předávané třídě budou kontrolovány na svůj původ a typ.
Porovnávání a identita
V PHP5 byla změněna funkčnost operátoru porovnávání a identity.
Magické metody
Magické metody umožňují programátorovi přenést na PHP starost o některé speciální a jiným způsobem těžko proveditelné úkoly, nezbytné při práci s OOP.
Operátor instanceof
Operátor „instanceof“ umožňuje jednoduše zjišťovat, zda daný objekt je instancí konkrétní třídy či rodiče, nebo zda je implementací nějakého rozhraní.
Dereference objektů
Dereference je možnost odkazování na metodu či vlastnost, která obsahuje další objekty, z nich chceme použít nějakou vlastnost či metodu jiného objektu.
Funkce pro spolupráci s OOP
PHP samozřejmě obsahuje řadu funkcí, které umožňují spolupráci objektového a neobjektového kódu, respektive práci s informacemi o objektovém kódu.
Využití OOP v praxi
Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování v PHP.
Výjimky v OOP
PHP 5, na rozdíl od předešlých verzí, umožňuje využívání výjimek stejně jako ostatní programovací jazyky. Výjimky rozšiřují možnosti ošetřování vzniklých chyb v PHP.
Standard PHP Library (SPL) – základní funkce
Na knihovnu SPL jste už mohli narazit v souvislosti s rozhraním Iterator. Zmíněná knihovna však nabízí i další funkce, rozhraní a třídy, které mohou být v praxi velmi užitečné. Náplní tohoto článku je popis funkcí SPL knihovny.
Standard PHP Library (SPL) – základní rozhraní
Knihovna SPL Marcuse Boergera neobsahuje pouze funkce pro práci s autoloadem, jak by se vám po předchozím článku mohlo zdát. Obsahuje desítky rozhraní a tříd, které vám mohou výrazně zpříjemnit práci s objekty. Náplní tohoto článku je popis základních rozhraní Countable a ArrayAccess.
Fluent Interfaces
Takzvané „Fluent Interface“ (česky též „plynulé rozhraní“ nebo „řetězcovité volání“) je způsob spojování metod jednoho či více objektů, který usnadňuje předávání pracovního kontextu objektu. Výhodou je zmenšení a celkové zpřehlednění kódu.
