Objektově orientované programování php. Vytvořte proměnné třídy. Naučte se rozdíly mezi objekty a třídami

Vývoj webových aplikací pomocí objektově orientovaného přístupu v jazyk PHP může být zpočátku matoucí pro vývojáře, kteří jsou zvyklí používat procedurální přístup, ale ve skutečnosti v OOP není nic složitého. V tento kurz budeme zvažovat teoretické aspekty OOP, a také se naučit aplikovat získané znalosti v praxi.

Kurz se skládá ze 17 lekcí, ve kterých se krok za krokem naučíme základy OOP, což by mělo stačit pro psaní objektových aplikací.

Po prostudování tohoto kurzu pochopíte, co je objektově orientované programování, naučíte se, co jsou třídy a objekty, a také pochopíte rozdíl mezi nimi. Seznamte se s vlastnostmi třídy, metodami a konstantami.

Po absolvování kurzu budete schopni používat dědičnost tříd k vytváření pohodlné a flexibilní logiky pro vaši webovou aplikaci a vytváření rozvětvených hierarchií tříd. Budete moci přepsat metody a tím rozšířit jejich funkčnost, vytvořit abstraktní třídy. Z kurzu se naučíte význam používání rozhraní a naučíte se, jak je používat tam, kde je to skutečně potřeba, a nepoužívat rozhraní kvůli rozhraním. Zvláštní pozornost Kurz se zabývá tématem automatického načítání třídy, které eliminuje dlouhé seznamy zahrnutých souborů. Zde se dozvíte jak o spouštěcích funkcích, tak o jejich použití pro tento účel. správce balíčků Skladatel.

To vše a mnohem více se dozvíte z lekcí navrhovaného kurzu OOP v PHP.

Všechny lekce kurzu:

Popis kurzu: V tomto kurzu se podíváme na teoretické aspekty OOP a také se naučíme aplikovat získané znalosti v praxi. Kurz se skládá ze 17 lekcí, ve kterých se krok za krokem naučíme základy OOP, což by mělo stačit pro psaní objektových aplikací.

Pokryjeme pojmy jako objektově orientované programování, třídy PHP, konstruktory PHP, destruktory PHP, magické metody PHP atd. Tato příručka je určena pro začátečníky a zkušení programátoři kteří se chtějí naučit PHP OOP od základní úrovně.

Jednou z největších změn v PHP 5 je úplné zahrnutí objektový model, což zvyšuje produktivitu. Některé z důležitých nových funkcí přidaných v PHP 5 zahrnují konečné a abstraktní metody, třídy, rozhraní, klonování a magické metody. Podíváme se na tento manuál OOP PHP příklady použití každého z nich.

V objektově orientovaném programování se s objektem zachází stejným způsobem jako s odkazy nebo ukazateli. To znamená, že každá nová proměnná obsahuje odkaz na objekt, nikoli kopii celého objektu.

Nejobtížněji pochopitelným konceptem jsou základy OOP, protože se liší od běžného programování v PHP. Jakmile ale pochopíte základní principy, model samotný se vám stane jednoduchým a přehledným.

Co je OOP v PHP?

Vzhledem k tomu, že pojem objektově orientované programování začíná slovem „objekt“, můžeme říci, že jde o speciální typ programování, ve kterém jsou vytvářeny a používány objekty.

Zde je vysvětlení PHP OOP pro figuríny. Podívejte se na svět kolem nás, je plný předmětů. Slunce, měsíc, auta, stromy, domy atd. atd. To vše jsou objekty, mají atributy a funkce. V procesu myšlení operujeme s předměty. Když mluvíme o autě, nemyslíte na kola, motor, sedadla, dveře, myslíte na auto jako na věc, kterou je. Jednoduše řečeno, přemýšlíte v pojmech subjektu nebo objektu. Objektová orientace je reprezentace prvků jako objektů v programování.

Auto je objekt. Má atributy barvy, velikosti, hmotnosti a funkce pohybu. Jakýkoli objekt bez funkčnosti bude k ničemu. V OOP programátor používá objekty; každý objekt má nějaké atributy a funkce. Programování obecně spočívá ve vytváření modulů pomocí objektů.

Jednoduchá definice objektově orientovaného programování:

Objektově orientované programování je programování založené na objektech obsahujících data (atributy) a metody (funkcionalitu), které tato data zpracovávají. Objekty jsou typem dat definovaných programátorem a programátor také definuje interakce mezi různými objekty.

Jinými slovy, OOP umožňuje programátorovi seskupovat podobné úkoly Ve třídách může třída obsahovat data a funkce pro přístup k těmto datům, které spolu souvisí.

Základní OOP v PHP vám pomůže vyvinout kód, který se snadněji udržuje a spravuje. Čím je kód čistší a čitelnější, tím je pravděpodobnější, že bude znovu použit. Díky tomu lze na systém aplikovat návrhové vzory. V OOP se moduly vytvářejí a používají podle požadavků. Pomocí objektově orientovaného programování v PHP můžeme vytvářet aplikace pro webové stránky, které mají modulární strukturu.

Důležité pojmy v PHP OOP tutoriálu:

Níže je obecná definice Některé důležité termíny, které se často používají v objektově orientovaném PHP.

Třída

V OOP třída PHP je datový typ definovaný programátorem. Třída obsahuje data a funkce pro práci s těmito daty. Data a funkce mají přístupové ID soukromé. To znamená, že nejsou vidět mimo třídu. Třída je šablona nebo šablona, ​​ze které lze vytvořit tolik kopií nebo instancí, kolik je potřeba.

Objekt

Objekt je také známý jako instance. Když je nainstalována instance třídy, vytvoří se objekt. Pokud je třída ukázkou, pak objekt je konečný produkt vytvořený pomocí vzorku. Jakmile je třída definována, lze z ní vytvořit mnoho objektů.

Členská proměnná

Proměnné definované ve třídě se nazývají členské proměnné. Ve skutečnosti se jedná o data obsažená v této třídě, lze je měnit pouze funkcemi této třídy. Členské proměnné jsou obvykle viditelné pouze pro tuto třídu a skryté před ostatními třídami.

Členská funkce

Funkce definované ve třídě se nazývají členské funkce. Nejsou také viditelné pro ostatní třídy. Používají se ke změně členských proměnných pro přístup k datům objektu.

Konstruktér

Konstruktor je speciální typ členské funkce. Když je nastavena třída, je vytvořen objekt, tato funkce je volána automaticky a přiřazuje počáteční hodnoty proměnným třídy.

Destruktor

Jedná se o speciální typ funkce, která je volána automaticky při odstranění objektu.

Dědictví

V PHP 5 OOP je dědičnost proces, kterým třída (podtřída) přijímá všechny atributy a funkce jiné třídy (nadtřídy).

Super třída

Také známá jako základní nebo rodičovská třída – zděděná jednou nebo více podtřídami.

Podtřída

Podřízená nebo odvozená třída, podtřída dědí z nadtřídy.

Polymorfismus

Jedná se o jev v OOP, ve kterém lze jednu funkci použít pro více účelů.

Zapouzdření

Jeden z nejdůležitějších konceptů v objektově orientovaném programování. Data a funkce, které s těmito daty pracují, jsou propojeny a nejsou viditelné pro ostatní funkce.

Abstrakce

Abstrakce znamená, že detaily implementace funkcí nebo tříd nejsou viditelné.

, což znamená, že funkce, které mají stejný název, ale různá množství argumenty se provádějí jinak.

Třídy a objekty:

Třída a objekt jsou v objektově orientovaném programování široce používány jako synonyma, ale ve svém jádru se od sebe velmi liší. Třída představuje vzor, ​​vzor nebo formu a objekt je produkt nebo část odlitá z tohoto konkrétního vzoru nebo formy.

Vezměme si například dům. Třída je základem domova; má rozměry, tvar, počet dveří, průchodů atd. Jde ale pouze o projekt, nikoli o dům samotný. Když je fyzický dům postaven na základě informací obsažených v plánu, jedná se o objekt.

Předtím byl objektem hromada dřeva, cihel, cementu atd., ze které byl postaven dům nebo objekt podle informací z plánu:

Třída v PHP OOP je plán nebo šablona, ​​podle které se nainstaluje instance třídy a vytvoří se objekt. Jakmile je třída vytvořena, můžeme vytvořit tolik objektů, kolik chceme. Na obrázku výše bylo z jedné třídy (plánu) vytvořeno pět objektů (domů). Objekt se bude vždy řídit pokyny uvedenými ve třídě použité k jeho vytvoření.

Výhody OOP v PHP:

  1. Vylepšená architektura a čistší kód

Objektově orientované PHP je lépe katalogizováno a snadno zabaleno, což vám umožňuje určit optimální architekturu. Obvykle je každá třída uložena v samostatném souboru. Procesní jazyky vyznačuje se složitým kódem, který je velmi obtížné přečíst nebo pochopit. V OOP prostřednictvím implementace objektů obsahujících soukromá data s jasná definice spojení mezi objekty je kód čitelný a čistý.

  1. Znovu použít

Objektově orientované programování umožňuje opětovné použití kódu. Jednou vytvořené objekty lze používat znovu a znovu. Programy lze vytvářet kombinací pracovních modulů namísto psaní všeho od začátku. To šetří čas a zvyšuje produktivitu.

  1. Snadná údržba a aktualizace

Objekty mají svá vlastní data a funkce a celá jejich struktura je kompaktní a komprimovaná, což usnadňuje provádění změn v kódu. Konvenční procedurální programování vytváří kód, ve kterém je velmi obtížné najít bod pro provádění změn. V OOP PHP můžeme přidat novou vlastnost a poté přidat souvisejících metod ovládat tuto vlastnost.

  1. Zapouzdření

Zapouzdření znamená, že hodnoty proměnných objektu nejsou zvenčí viditelné, a proto je implementováno zabezpečení dat. Pokud však vznikne potřeba, lze k datům přistupovat pomocí modifikátorů přístupu. K vytvoření bezpečné programy data a členské funkce ve třídě mohou být skryty před ostatními třídami. Jakmile je objekt vytvořen, nejsou k jeho použití potřeba žádné informace o implementaci.

  1. Dědictví

Dědičná třída přijímá všechny charakteristiky nadřazené třídy a poté k ní přidává své vlastní charakteristiky. Podtřída dědí proměnné a metody nadtřídy. Můžeme rozšířit použití stávajících tříd a také odstranit nepotřebný kód.

V tomto tutoriálu se naučíte základy objektově orientovaného programování v PHP. Dozvíte se obecně o principech OOP a naučíte se psát jednoduché skripty v PHP.

Vítejte u první ze série lekcí o OOP v PHP! Po přečtení všech lekcí v této sérii se seznámíte se základními principy a koncepty OOP a naučíte se, jak rychle a snadno vytvářet užitečné aplikace v PHP.

V tomto tutoriálu vás začnu dostávat do tempa a povím vám o základních konceptech OOP. Naučíte se:

  • co je OOP
  • jak vám OOP pomůže vytvořit nejlepší PHP skripty
  • některé základní pojmy jako třídy, objekty, metody, proměnné třídy
  • kde začít psát PHP skript

Jste připraveni ponořit se do světa? PHP objekty? Tak do toho!

Co je objektově orientované programování?

Pokud jste někdy vytvořili nativní funkce v PHP a použili jste je, pak jste použili programovací styl zvaný procedurální. V procedurálním programování obvykle vytváříte datové struktury - čísla, řetězce, pole atd. - uložit nějaká data a následně tyto struktury zpracovat speciální funkce, které s těmito daty manipulují.

Objektově orientované programování neboli OOP se posunulo vpřed, protože zde ukládáme datové struktury a funkce, které je zpracovávají, do jediné entity zvané objekt. Namísto zpracování dat nějakou funkcí načtete tato data do objektu a pak zavoláte jeho metody, abyste s nimi manipulovali a získali požadovaný výsledek.

Objekty vytvořené pomocí OOP nejčastěji odrážejí skutečné entity. Pokud například vytváříte fórum pro svůj web, vytvořili byste objekt Member, který bude ukládat informace o každém členovi fóra (jméno, přihlašovací jméno, e-mailová adresa, heslo atd.), jakož i způsoby, které budou tyto údaje zpracovávat (registrace, autorizace, odhlášení, zákaz atd.).

Proč používat OOP?

Procedurální a objektově orientovaný jsou dva odlišně udělat to samé. Tím neříkám, že jeden z nich je lepší než druhý – každý si píše, jak chce, takže tyto dva přístupy můžete dokonce snadno kombinovat v jednom scénáři.

Zde jsou však některé výhody OOP pro vývojáře:

  • Je snazší odrážet skutečné situace: jak jsem poznamenal výše, objekty odrážejí skutečné entity - lidi, produkty, karty, články na blogu atd. To značně zjednodušuje úkol, když teprve začínáte navrhovat svou aplikaci, protože účel každého objektu je jako cíl vztahy mezi objekty budou jasné a srozumitelné.
  • Jednodušší psát modulární programy: OOP zahrnuje psaní modulů. Rozdělením kódu do modulů pro vás bude snazší jej spravovat, ladit a rozšiřovat.
  • Je snazší napsat kód, který se bude používat mnohokrát: Psaní kódu, který lze použít vícekrát, ušetří čas při psaní aplikace a časem můžete dokonce vytvořit celou knihovnu těchto druhů modulů, které můžete použít v mnoha aplikací. S OOP je psaní takového kódu poměrně snazší, protože datové struktury a funkce jsou zapouzdřeny do jediného objektu, který lze použít mnohokrát.

Některé základní pojmy

Než začnete psát skripty, musíte dobře rozumět pojmům třída, objekt, proměnná třídy a metoda.

třídy

Třída je rámec pro objekt. Toto je část kódu, která definuje:

  • Datové typy, které budou vytvořené objekty třídy obsahovat
  • Funkce, které budou tyto objekty obsahovat.

Když vytvoříte aplikaci OOP, obvykle vytvoříte několik tříd, které budou reprezentovat různé typy entity vaší aplikace. Chcete-li například vytvořit fórum, můžete vytvořit třídy Forum, Topic, Post a Member.

Objekty

Objekt je proměnná speciální typ, který je vytvořen prostřednictvím třídy. Obsahuje aktuální data a funkce pro manipulaci s nimi. Z jedné třídy můžete vytvořit tolik objektů, kolik chcete. Každá funkce objektu je nezávislá na jiném objektu, i když jsou vytvořeny ze stejné třídy.

Pro srovnání se skutečnými entitami:

  • Třída je rámcem pro auto: definuje, jak bude auto vypadat a působit, ale stále je to abstraktní entita
  • Objekt je skutečné auto vytvořené z drátěného modelu: má skutečné vlastnosti (jako je rychlost) a chování (jako je zrychlení nebo brzdění).

Poznámka: Objekt se často nazývá podstatou třídy a proces vytváření objektu třídy se nazývá implementace.

Třídní proměnné

Hodnoty dat, které jsou uloženy v konkrétním objektu, se zapisují do speciálních proměnných nazývaných proměnné třídy. Proměnné třídy jsou úzce spojeny s jejím objektem. I když všechny objekty třídy mají stejné proměnné, jejich hodnoty se mohou lišit.

Metody

Funkce definované ve třídě a používané na objektech této třídy se nazývají metody. Od běžných funkcí se příliš neliší – můžete jim předávat hodnoty, mohou obsahovat lokální proměnné a návratové hodnoty. Metody však častěji pracují s objektovými proměnnými. Například metoda login() pro přihlašování uživatelů do vašeho fóra může nastavit proměnnou třídy přihlášený na hodnotu true.

Jak vytvořit třídu v PHP?

Nyní, když již víte, co jsou třídy, metody, proměnné tříd a objekty, je čas vytvořit několik tříd a objektů v kódu PHP.

Nejprve se podívejme, jak vlastně třídu vytvořit. V podstatě skript pro vytvoření třídy vypadá takto:

Třída Název třídy ( // (definice třídy) )

Pokud například vytváříte třídu členů pro své fórum, napište toto:

Člen třídy ( // (definice třídy) )

Je to docela jednoduché. Tato třída přirozeně neudělá nic, dokud do ní nepřidáte proměnné a metody. Výše uvedený kód však vytváří platnou třídu PHP, kterou lze použít.

Pravidlo slušného chování: zařaďte každou třídu samostatný soubor se stejným názvem jako název třídy. Například vložte třídu Member do souboru Member.php a uložte ji do složky, řekněme, class.

Jak vytvořit objekty v PHP?

Objekt můžete vytvořit pomocí nového klíčového slova:

Nový název třídy()

Tento kód vytvoří objekt třída Název_třídy. Tento objekt budete muset použít později, takže jej musíte uložit do proměnné. Vytvořme například objekt třídy Member a uložme jej do proměnné $member:

$člen = nový člen();

Můžeme také vytvořit další objekt stejné třídy:

$člen2 = nový člen();

I když jsme tyto dva objekty vytvořili ze stejné třídy, proměnné $member a $member2 jsou na sobě nezávislé.

Vytvořte proměnné třídy

Nyní, když již víme, jak vytvářet třídy a objekty tříd, podívejme se, jak vytvořit proměnné třídy. Existují 3 přístupové objekty pro proměnné třídy, které lze přidat do třídy:

  • Veřejné proměnné třídy (public): přístupné - tzn. lze je číst a/nebo upravovat – kdekoli ve skriptu, bez ohledu na to, kde se tento kód nachází – uvnitř třídy nebo mimo ni
  • Soukromé proměnné třídy (private): přístupné pouze metodám třídy. Nejlepší je nastavit proměnné třídy jako soukromé, aby se objekty oddělily od zbytku kódu.
  • Proměnné chráněné třídy: Dostupné pro metody vaší vlastní třídy i pro metody zděděných tříd (o dědičnosti si povíme později).

Chcete-li vytvořit proměnnou třídy, napište klíčové slovo public, private nebo protected a poté zadejte název proměnné:

Třída ClassName (veřejná $propertyName; soukromá $propertyName; chráněná $propertyName; )

Pojďme přidat proměnnou veřejné třídy do naší třídy Member pro uložení uživatelského jména:

Člen třídy ( public $username = ""; )

Všimněte si, že jsme inicializovali naši proměnnou třídy, její hodnotou je prázdný řetězec „“. To znamená, že když je vytvořen nový uživatel, výchozí uživatelské jméno bude stejné prázdný řádek. Stejně jako v případě běžných proměnných v PHP se proměnné třídy nemusí inicializovat, ale je lepší nebýt líný. Pokud neinicializujete proměnnou třídy, její výchozí hodnota je null.

Přístup k proměnným třídy

Chcete-li získat přístup k proměnné objektu, použijte operátor ->:

$object->propertyName

Zkusme to. Pojďme napsat skript, který deklaruje třídu Member a proměnnou třídy, vytvoří objekt této třídy a poté nastaví hodnotu proměnné třídy a zobrazí ji na obrazovce:

uživatelské jméno = "Fred"; echo $member->username; // Tisk "Fred" ?>

Běh tento kód, zobrazí řetězec „Fred“, hodnotu proměnné třídy $member->username. Jak vidíte, operujete objektová proměnná stejně jako běžná proměnná – můžete jí dát hodnotu a číst ji.

Přidání metod do třídy

A co vytváření metod? Jak jsem již zmínil, metody jsou pouze běžné funkce, které jsou součástí třídy. Možná vás tedy nepřekvapí, že jsou vytvořeny pomocí stejného klíčového slova funkce. Jediný rozdíl oproti vytváření běžných funkcí je v tom, že do jeho deklarace můžete přidat i jeden z přístupových identifikátorů (veřejný, soukromý, chráněný). Tímto způsobem jsou metody podobné proměnným třídy:

Třída Název třídy ( public function methodName() ( // (code) ) private function methodName() ( // (code) ) protected function methodName() ( // (code) ) )

Poznámka: stejně jako v případě proměnných třídy lze veřejné metody volat odkudkoli, soukromé metody lze volat pouze v rámci třídy a chráněné metody lze volat ze samotné třídy a jejího potomka.

Zkusme do naší třídy přidat nějaké metody a proměnné třídy:

  • privátní proměnná třídy $loggedIn k identifikaci uživatele, tzn. ať vešel nebo ne,
  • login() metoda, která se přihlásí do fóra nastavením proměnné třídy $loggedIn na hodnotu true,
  • metodu logout(), která se odhlásí z fóra nastavením proměnné třídy $loggedIn na hodnotu false,
  • isLoggedIn() metoda, která vrátí hodnotu proměnné třídy $loggedIn.

Zde je náš kód:

přihlášen = true;

) veřejná funkce logout() ( $this->loggedIn = false; ) veřejná funkce isLoggedIn() ( return $this->loggedIn; ) ) ?>

Možná jste si všimli, že jsme použili nové klíčové slovo $this. V kontextu metod objektu odkazuje speciální proměnná $this na samotný objekt. Použitím $this v metodě objektu může metoda přistupovat k libovolné proměnné třídy a metodě objektu.

Například metoda login() může přistupovat k proměnné třídy $loggedIn objektu prostřednictvím $this->loggedIn. Mimochodem, naše proměnná třídy je soukromá, takže ji nelze volat z žádné části skriptu, ale pouze z metod login(), logout() a isLoggedIn(). To je dobrý přístup, protože objekt (například jak přesně se zaznamenává, zda je uživatel přihlášen nebo ne) je oddělen od zbytku kódu. Kdykoli je to možné, snažte se používat proměnné privátní třídy, aby byly vaše objekty autonomní, mobilní a chráněné.

Poznámka: proměnná třídy $username v našem příkladu je veřejná. Udělal jsem to jen proto, abych ukázal, jak můžete přistupovat k proměnným třídy objektu. V skutečné projekty spíše byste měli tuto proměnnou nastavit jako soukromou a v případě potřeby vytvořit speciální proměnné veřejné třídy pro nastavení hodnot uživatelských jmen.

Použití metod

Pro volání metody na objektu použijte operátor ->, se kterým jste se již seznámili.

$object->methodName()

Funguje to stejně jako výzva pravidelná funkce. Argumenty můžete předávat v závorkách (samozřejmě za předpokladu, že to vyžaduje nějaké argumenty), volání metody může také vrátit určité hodnoty, který pak můžete použít.

přihlášen = true;
) public function logout() ( $this->loggedIn = false; ) public function isLoggedIn() ( return $this->loggedIn; ) ) $member = new Member(); $member->username = "Fred"; echo $member->username . "je". ($member->
"; $member->login(); echo $member->username . " je " . ($member->isLoggedIn() ? "přihlášeno" : "odhlášeno") ."
"; ?>

"; $member->logout(); echo $member->username . " je " . ($member->isLoggedIn() ? "přihlášeno" : "odhlášeno") ."

Tento skript zobrazí následující:

Fred je odhlášen Fred je přihlášen Fred je odhlášen

  1. Funguje to takto:
  2. Po popisu třídy Member jsme vytvořili její objekt a uložili jej do proměnné $member. Také jsme dali proměnné třídy $username tohoto objektu hodnotu „Fred“.
  3. Poté jsme zavolali metodu $member->isLoggedIn(), abychom zjistili, zda je uživatel přihlášen nebo ne. Tato metoda jednoduše vrátí hodnotu proměnné třídy $loggedIn. Protože výchozí hodnota této proměnné třídy je false, výsledek volání $member->isLoggedIn() bude nepravdivý, takže se zobrazí zpráva "Fred je odhlášen".
  4. Poté zavoláme metodu login(). Nastaví proměnnou třídy $loggedIn na hodnotu true.
  5. Nyní při volání metody $member->isLoggedIn() vrátí hodnotu true a zobrazí zprávu „Fred je přihlášen“.
  6. Zavolejte metodu $member->isLoggedIn() potřetí. Nyní vrátí hodnotu false, protože vlastnost $loggedIn je opět nastavena na hodnotu false. Znovu se tedy zobrazí zpráva „Fred je odhlášen“.

Poznámka: v případě, že jste viděli toto jako první: ?: je ternární operátor. Toto je zjednodušená verze bloků if...else. Můžete se dozvědět o těchto typech operátorů.

Závěry

V tomto tutoriálu jste se naučili základy OOP v PHP. Dozvěděli jste se o věcech jako:

  • Co je OOP a proč je užitečný?
  • koncepty tříd, objektů, proměnných tříd a metod
  • jak vytvářet třídy a objekty
  • jak vytvářet a používat proměnné třídy
  • koncepty identifikátorů přístupu veřejný, soukromý, chráněný
  • jak vytvářet a používat metody tříd

Už jste se o tom hodně naučili a mnohem více se dozvíte v následujících lekcích. Pokud jste však prošli všemi příklady, které jsem uvedl, máte pevný základ. Pomocí OOP můžete začít vytvářet aplikace.

Od autora: moderní profesionální programování je prostě nemyslitelné bez objektově orientovaného programování, které se v tichosti stalo jakýmsi standardem pro vysoké programovací jazyky a samozřejmě PHP není výjimkou. Stává se ale, že přechod z procedurálního stylu programování na objektový je pro začátečníky provázen jistými obtížemi, takže se dnes podíváme na základy OOP PHP.

Nejprve se podívejme na hlavní výhody objektově orientovaného přístupu, abychom pochopili, proč se tak rozšířil.

Kód objektově orientovaného přístupu je poměrně snadno pochopitelný a čitelný a je vynikající pro implementaci rozsáhlých a velmi složitých projektů.

Aplikace napsané pomocí tohoto programovacího přístupu se snadno modernizují a rozšiřují.

Správně navržené aplikace se skládají ze samostatných modulů, což znamená, že je lze v případě potřeby rychle upravovat a aktualizovat, což zvyšuje rychlost vývoje o několik řádů.

Nyní, když byly identifikovány hlavní přednosti dotyčného stylu kódování, můžeme přejít přímo k podstatě této lekce.

Základem objektově orientovaného programování v PHP je tedy princip spojování dat a funkcí, které je manipulují do odpovídajících objektů. Což se poněkud liší od běžného procesního přístupu, kde jsou podobné prvky definovány odděleně od sebe. To znamená, že objekty obsahují nějaké informace, které jsou uloženy v jeho vlastnostech (tak se nazývají objektové proměnné) a určitý soubor akcí, které jsou popsány v jeho metodách (ve skutečnosti běžné funkce). V tomto případě metody ve své práci zpravidla pracují s daty uloženými ve vlastnostech, což znamená jak čtení, zápis, tak změnu.

Podle toho můžeme říci, že základem metodologie objektově orientovaného programování v PHP je práce s objekty, respektive jejich využití k manipulaci s daty.

V tomto případě je objekt vytvořen z dříve definované třídy a ta zcela popisuje její strukturu a funguje jako druh šablony. Jinými slovy, třída popisuje vlastnosti a metody budoucích vytvořených objektů. A je to vidět na následujícím příkladu.

třída Zákazník ( veřejné $jméno; chráněné $objednávky; veřejná funkce __construct($jméno, $objednávky) ( $this->name = $jméno; $this->orders = $objednávky; ) veřejná funkce getName() ( return $this ->name ) ) $customer = new Customer("Ben", array("id" => 10)); echo $customer->getName();

třída Zákazník(

public$name;

chráněné $objednávky;

veřejná funkce __construct ($name, $orders) (

$toto -> jmeno = $jmeno ;

$ this -> orders = $ orders ;

veřejná funkce getName() (

return $this -> jmeno ;

$customer = new Customer("Ben", array("id" => 10));

echo $customer -> getName();

Při implementaci instance třídy (tj. vytvoření nového objektu pomocí specifické třídy zájmu) se vytvoří nový objekt a také se určí vlastnosti popsané ve třídě. Kromě toho je ke spuštění spuštěna speciální metoda nazvaná __construct(), pokud samozřejmě není popsána ve struktuře třídy. Jak vidíte, k vytvoření objektu se použije klíčové slovo new a za ním název třídy. V závorkách jsou v případě potřeby předány argumenty výše uvedené metodě, která zpravidla definuje některá počáteční data pro budoucí objekt.

Ve výše uvedeném příkladu se kromě vytvoření objektu zavolá metoda getName() a zobrazí se hodnota, kterou vrací. Samozřejmě v důsledku činnosti skriptu uvidíme výstup uživatelského jména – „Ben“, protože právě toto je předáno jako první argument metodě konstruktoru, kde je zapsáno do vlastnosti třídy pod jméno jméno. Výše uvedená metoda tedy vrací hodnotu této vlastnosti jako výsledek své práce.

Zároveň vám nikdo nezakazuje vytvořit další podobný objekt z dříve popsané třídy:

$customer2 = new Customer("Sem", array("id" => 15)); echo $customer2->getName();

$customer2 = new Customer("Sem", array("id" => 15));

echo $customer2 -> getName();

V tomto případě na obrazovce uvidíme jméno zcela jiného uživatele – „Sem“. Vytvořili jsme tak v podstatě úplně jiný objekt ze stejné šablony – třídu. Zároveň má tento objekt zcela odlišná počáteční data, která jsou stále tvořena metodou konstruktoru, což znamená, že jeho chování, určené metodami, bude také odlišné.

Vezměte prosím na vědomí, že vlastnosti třídy a jejích metod lze použít pouze s konkrétním objektem - přesně to je vidět na příkladu a bez toho jsou z hlediska práce mimo třídu absolutně k ničemu, protože uvnitř třídy, samozřejmě je lze použít v kódu jejích metod. Přístup k výše uvedeným prvkům objektu se navíc provádí prostřednictvím speciální sady znaků „->“ (šipka), před kterou je nutné označit objekt zájmu, nebo ukazatel objektu - klíčové slovo $this. Ukazatel objektu $this se používá v kódu metod přímo uvnitř třídy pro přístup k jejím vlastnostem nebo metodám.

A opět vidíme, že základem vývoje OOP v PHP je práce s objekty a krása je v tom, že třídu popíšeme jednou, což znamená, že tvoříme určitý soubor dat a potřebnou funkcionalitu. A pak vytváříme objekty, z nichž každý bude v závislosti na počátečních datech ve skutečnosti naprosto jedinečný.

Z výše uvedeného vyplývá, že třída, na základě které budou objekty vytvořeny, popisuje data a funkčnost určité entity budoucího projektu, například práci s uživateli, stránkami, menu, adresami atp. A samozřejmě, pokud existuje více takových entit, pak je potřeba vytvořit několik tříd, což znamená, že pro každou z nich bude vytvořen alespoň jeden objekt. I když ne vždy, někdy jsou některé třídy vytvořeny jako rodiče pro určité podřízené třídy, což znamená, že fungují jako úložiště nějaké společné funkce, což přirozeně znamená vytvoření celé hierarchie tříd pro budoucí projekt. To je ale úplně jiné téma, které nezapadá do rozsahu aktuálního článku.

Ve skutečnosti jsme si zde krátce zopakovali základy objektově orientovaného programování v PHP. Tento typ programování samozřejmě vyžaduje více pozornosti než jeden článek, pokud mu chcete skutečně dobře porozumět a využít jej ve své práci. Toto téma je podrobněji rozebráno v prémiovém kurzu.

Vše nejlepší a šťastné kódování!!!

11. března 2010 v 11:37 hodin

OOP s příklady (část 1)

  • Vzdělávací proces v IT

Vůlí osudu si musím přečíst speciální kurz o designových vzorech na univerzitě. Speciální kurz je povinný, takže studenti, kteří ke mně přicházejí, jsou velmi odlišní. Samozřejmě jsou mezi nimi i cviční programátoři. Ale bohužel většina lidí má potíže i s pochopením základních pojmů OOP.

K tomu jsem se pokusil vysvětlit základní pojmy OOP (třída, objekt, rozhraní, abstrakce, zapouzdření, dědičnost a polymorfismus) na víceméně živých příkladech.

První část níže je o třídách, objektech a rozhraních.
ilustruje zapouzdření, polymorfismus a dědičnost

Základní pojmy OOP

Třída
Představte si, že navrhujete auto. Víte, že auto musí obsahovat motor, odpružení, dva světlomety, 4 kola atd. Víte také, že vaše auto musí umět zrychlovat a zpomalovat, zatáčet a couvat. A hlavně přesně víte, jak na sebe motor a kola působí, podle jakých zákonů se pohybuje vačkový a klikový hřídel a také jak jsou navrženy diferenciály. Jste si jisti svými znalostmi a začněte navrhovat.

Popisujete všechny části, které tvoří vaše auto, a také to, jak tyto části na sebe vzájemně působí. Navíc popisujete, co musí uživatel udělat, aby auto zabrzdilo nebo rozsvítilo dálková světla. Výsledkem vaší práce bude skica. Právě jste vyvinuli to, čemu se říká OOP Třída.

Třída je způsob popisu entity, který definuje stav a chování, které na tomto stavu závisí, a také pravidla pro interakci s touto entitou (smlouvou).

Třídu lze z programátorského hlediska považovat za soubor dat (pole, atributy, členy třídy) a funkcí pro práci s nimi (metody).

Z hlediska struktury programu je třída komplexní datový typ.

V našem případě třída zobrazí entitu – auto. Atributy třídy budou motor, odpružení, karoserie, čtyři kola atd. Metody třídy budou „otevřít dveře“, „sešlápnout plynový pedál“ a také „načerpat část benzínu z plynové nádrže do motoru“. První dvě metody jsou dostupné pro provádění jinými třídami (zejména třídou „Driver“). Ten popisuje interakce v rámci třídy a není přístupný uživateli.

Od nynějška, i když je slovo „uživatel“ spojeno se Solitaire a Microsoft Word, budeme jako uživatele označovat programátory, kteří používají vaši třídu, včetně vás. Osobu, která je autorem třídy, budeme říkat vývojář.

Objekt
Odvedli jste skvělou práci a stroje vyvinuté podle vašich výkresů sjíždějí z montážní linky. Tady jsou, stojící v úhledných řadách na továrním dvoře. Každý z nich přesně opakuje vaše kresby. Všechny systémy spolupracují přesně tak, jak jste navrhli. Ale každé auto je jedinečné. Všechny mají čísla karoserie a motoru, ale tato čísla jsou všechna odlišná, auta se liší barvou a některá mají dokonce odlitky místo vyražených kol. Tato auta jsou v podstatě předměty vaší třídy.

objekt (instance) je individuální zástupce třídy, který má specifický stav a chování, které je zcela určováno třídou.

Jednoduše řečeno, objekt má specifické hodnoty atributů a metody, které fungují na těchto hodnotách na základě pravidel definovaných ve třídě. Pokud je v tomto příkladu třída nějaké abstraktní auto ze „světa myšlenek“, pak je objektem konkrétní auto stojící pod vašimi okny.

Rozhraní
Když přistoupíme ke kávovaru nebo usedneme za volant, začneme s nimi komunikovat. K interakci obvykle dochází pomocí určité sady prvků: štěrbiny pro přijímání mincí, tlačítka pro výběr nápoje a přihrádky na výdej sklenice v kávovaru; volant, pedály, řadicí páka v autě. Vždy existuje nějaká omezená sada ovládacích prvků, se kterými můžeme komunikovat.

Rozhraní je sada metod tříd, které jsou dostupné pro použití jinými třídami.

Je zřejmé, že rozhraním třídy bude sada všech jejích veřejných metod spolu se sadou veřejných atributů. Rozhraní v podstatě specifikuje třídu a jasně definuje všechny možné akce s ní.
Dobrým příkladem rozhraní je přístrojová deska automobilu, která umožňuje vyvolat metody jako zrychlení, brzdění, zatáčení, řazení, rozsvícení světlometů atd. Tedy všechny úkony, které může jiná třída (v našem případě řidič) provádět při interakci s vozem.

Při popisu rozhraní třídy je velmi důležité najít rovnováhu mezi flexibilitou a jednoduchostí. Třída s jednoduchým rozhraním se bude snadno používat, ale vyskytnou se problémy, které nedokáže vyřešit. Zároveň, pokud je rozhraní flexibilní, pak se s největší pravděpodobností bude skládat z poměrně složitých metod s velkým počtem parametrů, které vám umožní udělat hodně, ale jeho použití bude spojeno s velkými obtížemi a rizikem chyba, něco popleteného

Příkladem jednoduchého rozhraní může být automobil s automatickou převodovkou. Jeho obsluhu si velmi rychle osvojí každá blondýnka, která absolvovala dvoutýdenní řidičský kurz. Na druhou stranu, abyste zvládli řízení moderního osobního letadla, potřebujete několik měsíců nebo dokonce let tvrdého tréninku. Nechtěl bych být na palubě Boeingu pilotovaného někým, kdo má dva týdny letových zkušeností. Na druhou stranu nikdy nedostanete auto, které by vzlétlo a odletělo z Moskvy do Washingtonu.




Nahoru