Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - První objektová aplikace v PHP

V minulé lekci, Úvod do objektově orientovaného programování v PHP, jsme si vysvětlili proč OOP vzniklo a nakousli jak OOP vypadá.

V dnešním tutoriálu se budeme věnovat tomu jak OOP funguje a vytvoříme si svou první objektovou aplikaci v PHP.

Jak OOP funguje

OOP nám umožňuje nasimulovat realitu tak, jak ji jsme zvyklí vnímat. Můžeme tedy říci, že se odpoutáváme od toho, jak program vidí počítač (stroj) a píšeme program spíše z pohledu programátora (člověka). Jako jsme tehdy nahradili assembler lidsky čitelnými matematickými zápisy, nyní jdeme ještě dál a nahradíme i ty. Jde tedy o určitou úroveň abstrakce nad programem. To má značné výhody už jen v tom, že je to pro nás přirozenější a přehlednější.

Základní jednotkou je objekt, který odpovídá nějakému objektu z reálného světa (např. objekt člověk nebo databáze).

Objekty v objektově orientovaném programování - Objektově orientované programování (OOP) v PHP

Objekt má své atributy a metody.

Atributy

Atributy objektu jsou vlastnosti neboli data, která uchovává (např. u člověka $jméno a $věk, u databáze $heslo). Jedná se vlastně o proměnné, se kterými jsme již stokrát pracovali. Někdy o nich hovoříme jako o vnitřním stavu objektu. Atribut na rozdíl od proměnných, které jsme používali dříve, patří nějakému objektu.

Metody

Metody jsou schopnostmi, které umí objekt vykonávat. U člověka by to mohly být metody: jdiDoPrace(), pozdrav() nebo mrkni(). U databáze pridejZaznam() nebo vyhledej()). Metody mohou mít parametry a mohou také vracet nějakou hodnotu. Od funkcí se liší tím, že metoda patří objektu, zatímco funkce nepatří nikam (to je také problém neobjektového kódu).

Objekty v objektově orientovaném programování - Objektově orientované programování (OOP) v PHP

Jazyk PHP není objektově založený, jen objektově orientovaný. To znamená, že v něm lze programovat objektově, ale vnitřní funkce jazyka objektové nejsou. Je to samozřejmě z důvodu, že PHP vzniklo v době, kdy OOP nebylo tolik rozšířené. Ačkoli je situace s každou verzí lepší a lepší, je zde dokonale vidět jak příšerně vypadá větší projekt bez použití OOP.

PHP obsahuje stovky volných funkcí, které nikam nepatří. Je jich tolik, že se v nich již nikdo nevyzná. Např. většina funkcí na poli začíná názvem array_ (např. array_reverse()), funkce k setřídění pole se však jmenuje jen sort(). Kdyby funkce náležely objektu pole, tyto problémy by neexistovaly a člověk by nemusel trávit tolik času v manuálu. To samé platí u konstant. Naštěstí i samotní vývojáři PHP začínají chápat, že jsou objekty potřeba a dodávají objekty např. pro práci s datem a časem, databází a podobně.

Třída

Abychom si vytvořili objekt, musíme si nejprve vytvořit tzv. třídu. Třída je vzor, podle kterého se objekty vytváří. Definuje jejich vlastnosti a schopnosti.

Objekt, který se vytvoří podle třídy, se nazývá instance. Instance mají stejné rozhraní jako třída, podle které se vytváří, ale navzájem se liší svými daty (atributy). Mějme například třídu Člověk a od ní si vytvořme instance $karel a $josef. Obě instance mají jistě ty samé metody a atributy jako třída (např. $jméno a $věk) a metody (jdiDoPrace() a pozdrav()). Hodnoty v jejich atributech se však samozřejmě liší (první instance má v atributu jméno hodnotu "Karel" a ve věk 22, druhá "Josef" a 45).

Objekty v objektově orientovaném programování - Objektově orientované programování (OOP) v PHP

Samotné objektově orientované programování pojem objekt vlastně vůbec nezná, rozlišuje pouze třídu a instanci. Pokud napíši v článku objekt, mám na mysli instanci.

Komunikace mezi objekty probíhá pomocí předávání zpráv, díky čemuž je syntaxe přehledná. Zpráva obvykle vypadá takto: $příjemce->jménoMetody($parametry);. Např. $karel->pozdrav($sousedka); by mohl způsobit, že instance $karel pozdraví instanci $sousedka.

PHP a objekty

PHP podporovalo objekty již někde ve verzi 4, jejich implementace ale byla tak příšerná, že je nikdo nepoužíval. Další pokus proběhl ve verzi 5, kde se PHP začalo výrazně inspirovat úspěšným objektovým jazykem Java. Od této verze se v PHP programuje objektově vcelku dobře a od verze 5.3 je to velmi dobře objektově orientovaný jazyk. Tento seriál budu psát pro PHP verze 8.1 a vyšší. I verze 5.3 je již staršího data a ještě starší PHPčka běží snad jen na nějakých nekvalitních freehostinzích. Z těch lepších je např. Endora, kde mají na freehostingu k dispozici jako nejnovější verzi PHP 7.4. U placených webhostingů je aktuální PHP samozřejmostí. Mimo jiné se nemá smysl učit zastaralé věci co přestanou v budoucnu fungovat, takže pojedeme objekty tak, jak jsou v aktuálních verzích.

První objektová aplikace

Přistupme tedy k vytvoření naší první objektové aplikace. Zatím budeme vytvářet pouze velmi jednoduché třídy, jelikož se na nich dobře vysvětluje nová teorie. Časem zjistíme, že se objekty reálně na webu používají ještě trochu jinak, ale na to máme spoustu času.

Vytvoření třídy

Definujme si třídu Clovek, která nám umožní vytvářet instance lidí.

Třídy píšeme do samostatných souborů a tyto soubory pojmenováváme stejně, jako se jmenuje třída. K pojmenovávání tříd používáme tzv. PascalCase, kdy třída začíná na velké písmeno a pokud má více slov, píšeme je dohromady a každé nové slovo opět s velkým písmenem. Třídy je dobré mít v nějaké složce, vytvořme si tedy složku tridy/ a v ní soubor Clovek.php. Jelikož je většina serverů linuxových, záleží na velikosti písmen a s clovek.php to fungovat nebude.

Obsah souboru bude následující:

<?php

class Clovek
{


}

Třídu jsme definovali klíčovým slovem class a vytvořili jí blok ze složených závorek, kam budeme psát její prvky. Všimněte si, že jsme PHP direktivu na začátku souboru pouze otevřeli, ale již neuzavřeli. Je to doporučená praktika, protože v souboru nebude žádné HTML a proto by se mělo PHP otevřít hned na začátku a pokud ho neuzavřeme, platí až na konec souboru.

Metody

Budeme chtít, aby naši lidé něco uměli. Začněme jednoduše tím, že je naučíme pozdravit. Zatím jen tak, že vypíší "Ahoj". Přidejme si do třídy metodu pozdrav:

<?php
class Clovek
{

    public function pozdrav() : void
    {
        echo('Ahoj');
    }

}

Metoda nápadně připomíná funkci, jen má u sebe tzv. modifikátor přístupu public. To znamená, že budeme schopni tuto metodu na instanci zvenčí volat. To by bylo v souboru Clovek.php pro dnešek vše.

Vraťme se do složky s projektem a vytvořme soubor index.php. Soubor s třídou musíme načíst pomocí funkce require(), jen tak budeme schopni vytvořit její instanci. Abychom se vyvarovali problémům, použijeme funkci require_once(), která třídu načte jen v případě, že načtená ještě není. Následně vytvoříme instanci třídy Clovek a přikážeme ji, aby nás pozdravila:

<?php
require_once('tridy/Clovek.php');

$karel = new Clovek();
$karel->pozdrav();
<?php

class Clovek
{
    public function pozdrav() : void
    {
        echo('Ahoj');
    }

}

Instance ukládáme jednoduše do proměnných. Proměnná by se samozřejmě měla jmenovat podle toho, co v ní je. Instanci vytvoříme pomocí klíčového slova new, za kterým následuje název třídy a poté závorky. Závorky nejsou povinné, ale je lepší je tam psát. Na instanci nyní můžeme volat metody, které jsou ve třídě definovány. Metody voláme pomocí operátoru šipky a jedná se v podstatě o vylepšené volání funkcí, jako jsme to dělali dříve.

Výstup programu nyní bude:

Tvoje stránka
localhost

Zdrojový kód aplikace máte v příloze.

Naše aplikace nyní pracuje s objektem a i když bychom ji zatím mohli nahradit pouhým zavoláním echo('Ahoj'), v budoucnu se nám objekty velmi vyplatí. Až bude kódu více, bude stále přehledný.

V příští lekci, Atributy a magické metody v PHP, se zaměříme na atributy objektů a tzv. magické metody.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1336x (1.49 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

Předchozí článek
Úvod do objektově orientovaného programování v PHP
Všechny články v sekci
Objektově orientované programování (OOP) v PHP
Přeskočit článek
(nedoporučujeme)
Atributy a magické metody v PHP
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
244 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity