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.