PHP - OOP alebo procedurálny prístup. Objektovo orientované PHP pre začiatočníkov

  • 18.06.2019

Od autora: moderné profesionálne programovanie je jednoducho nemysliteľné bez objektovo orientovaného programovania, ktoré sa verejne nestalo akýmsi štandardom pre vysoké programovacie jazyky a, samozrejme, PHP nie je výnimkou. Stalo sa však, že prechod z procedurálneho programovacieho štýlu na objektový je pre začiatočníkov sprevádzaný určitými ťažkosťami, takže dnes zvážime základy OOP PHP.

Najprv sa pozrime na hlavné výhody objektovo orientovaného prístupu, aby sme pochopili, prečo sa tak rozšíril.

Kód objektovo orientovaného prístupu je celkom ľahko pochopiteľný a čitateľný a je skvelý na implementáciu rozsiahlych a veľmi zložitých projektov.

Aplikácie napísané pomocou tohto programovacieho prístupu sa ľahko aktualizujú a rozširujú.

Správne navrhnuté aplikácie pozostávajú zo samostatných modulov, čo znamená, že v prípade potreby je možné ich rýchlo dolaďovať a aktualizovať, čo zvyšuje rýchlosť vývoja o niekoľko rádov.

Teraz, keď boli identifikované hlavné silné stránky predmetného štýlu kódovania, môžeme prejsť priamo k podstate tejto lekcie.

V srdci objektovo orientovaného programovania v PHP je teda princíp spájania údajov a funkcií, ktoré ich manipulujú do vhodných objektov. Čo sa trochu líši od bežného procesného prístupu, kde sú podobné prvky definované oddelene od seba. To znamená, že objekty obsahujú nejaké informácie, ktoré sú uložené v ich vlastnostiach (ako sa nazývajú premenné objektu) a určitý súbor akcií, ktoré sú opísané v jeho metódach (v podstate bežné funkcie). Metódy zároveň vo svojej práci spravidla pracujú s údajmi uloženými vo vlastnostiach, čo znamená čítanie, zápis a zmenu.

Podľa toho môžeme povedať, že základom metodiky objektovo orientovaného programovania v PHP je práca s objektmi, respektíve ich používanie na manipuláciu s dátami.

V tomto prípade je objekt vytvorený z vopred definovanej triedy a táto plne popisuje jej štruktúru a funguje ako druh šablóny. Inými slovami, trieda popisuje vlastnosti a metódy budúcich vytvorených objektov. A je to vidieť na nasledujúcom príklade.

trieda Zákazník ( verejné $meno; chránené $objednávky; verejná funkcia __construct($meno, $objednávky) ( $this->name = $name; $this->orders = $orders; ) verejná funkcia getName() ( return $this ->meno; ) ) $customer = new Customer("Ben", array("id" => 10)); echo $customer->getName();

triedaZákazník(

verejné $meno;

chránené $objednávky;

verejná funkcia __construct ( $name , $orders ) (

$this -> meno = $meno;

$this -> objednávky = $objednávky ;

verejná funkcia getName()(

return $this -> meno ;

$ zákazník = nový zákazník ("Ben" , pole ("id" => 10) ) ;

echo $customer -> getName();

Pri implementácii inštancie triedy (teda vytvorení nového objektu pomocou špecifickej záujmovej triedy) sa vytvorí nový objekt a definujú sa aj vlastnosti opísané v triede. Okrem toho sa spustí špeciálna metóda s názvom __construct () na vykonanie, pokiaľ, samozrejme, nie je popísaná v štruktúre triedy. Ako vidíte, na vytvorenie objektu sa použije kľúčové slovo new, za ktorým nasleduje názov triedy. V zátvorkách, ak je to potrebné, sú uvedené argumenty pre vyššie uvedenú metódu, v ktorej sa spravidla určujú niektoré počiatočné údaje pre budúci objekt.

Vo vyššie uvedenom príklade sa okrem vytvorenia objektu zavolá metóda getName() a na obrazovke sa zobrazí ňou vrátená hodnota. Samozrejme, v dôsledku skriptu uvidíme výstup používateľského mena - „Ben“, pretože je to ten, ktorý sa odovzdá ako prvý argument metóde konštruktora, kde sa zapíše do vlastnosti triedy pod názvom názov. V súlade s tým vyššie uvedená metóda vracia hodnotu tejto vlastnosti ako výsledok svojej práce.

Zároveň vám nikto nezakazuje vytvoriť ďalší podobný objekt z vyššie opísanej triedy:

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

$ zákazník2 = nový zákazník ("Sem" , pole ("id" => 15) );

echo $customer2 -> getName();

V tomto prípade na obrazovke uvidíme meno úplne iného používateľa - „Sem“. Z rovnakej šablóny sme teda v skutočnosti vytvorili úplne iný objekt – triedu. Tento objekt má zároveň úplne iné počiatočné dáta, ktoré sú stále tvorené metódou konštruktora, čo znamená, že aj jeho správanie, určené metódami, bude iné.

Upozorňujeme, že vlastnosti triedy a jej metód je možné použiť iba s konkrétnym objektom - presne to je vidieť v príklade a bez toho sú absolútne zbytočné z hľadiska práce mimo triedy, pretože vo vnútri triedy , samozrejme, môžu byť použité v kóde jeho metód. Okrem toho sa prístup k vyššie uvedeným prvkom objektu vykonáva prostredníctvom špeciálnej sady znakov „->“ (šípka), pred ktorou musíte zadať objekt záujmu alebo ukazovateľ objektu - kľúčové slovo $this. Ukazovateľ objektu $this sa používa v kóde metódy priamo vo vnútri triedy na prístup k jej vlastnostiam alebo metódam.

A opäť vidíme, že základom vývoja OOP v PHP je práca s objektmi a krása spočíva v tom, že triedu popíšeme raz, čiže vytvoríme určitý súbor údajov a potrebnú funkcionalitu. A potom vytvoríme objekty, z ktorých každý bude v závislosti od počiatočných údajov v skutočnosti úplne jedinečný.

Z uvedeného vyplýva, že trieda – na základe ktorej budú objekty vytvorené, popisuje dáta a funkčnosť určitej entity budúceho projektu, napríklad prácu s používateľmi, stránkami, menu, adresami atď. A samozrejme, ak je takýchto entít viacero, tak treba vytvoriť niekoľko tried, čo znamená, že pre každú z nich bude vytvorený aspoň jeden objekt. Aj keď nie vždy, niekedy sú niektoré triedy vytvorené ako rodičia pre určité detské triedy, čo znamená, že fungujú ako úložisko niektorých spoločných funkcií, čo samo osebe znamená vytvorenie celej hierarchie triedy budúceho projektu. Ale to je úplne iná téma, ktorá nezapadá do rozsahu aktuálneho článku.

V skutočnosti sme si tu stručne zopakovali základy objektovo orientovaného programovania v PHP. Samozrejme, že tento druh programovania si vyžaduje viac pozornosti ako jeden článok, ak sa v ňom chcete naozaj zdokonaliť a použiť ho vo svojom vývoji. Táto téma je podrobnejšie rozobratá v prémiovom kurze.

Všetko najlepšie a šťastné kódovanie!!!

PHP je jedným z najpopulárnejších skriptovacích programovacích jazykov. Takmer 60% webových serverov používa PHP. Každý mesiac sú v PHP vyvinuté milióny webových stránok a webových aplikácií.

PHP bolo pôvodne vyvinuté ako jednoduchá náhrada za Perl a za pár rokov sa stalo mimoriadne výkonným a populárnym. Samotný jazyk PHP je veľmi podobný ANSI C.
Jedným z dôvodov, prečo sa PHP stalo tak populárnym, je jeho krátka doba učenia.

Naučiť sa PHP nie je vôbec ťažké, najmä ak ste oboznámení so syntaxou Java alebo C.

Keďže písanie PHP skriptov je celkom jednoduché, PHP kód môže písať každý bez toho, aby sa držal nejakých konvencií a miešal prezentačnú vrstvu s biznis logikou (to je jeden z hlavných dôvodov existencie veľkého množstva neriadených projektov). Pretože PHP nemusí nevyhnutne dodržiavať prísne kódovacie konvencie, v priebehu rokov, ako sa projekt zväčšuje a zväčšuje, sa mení na obrovskú nespravovanú aplikáciu.

OOP alebo objektovo orientované programovanie sa dobre používa v programátorskej praxi na uľahčenie vytvárania spravovateľných projektov.
Procedurálny prístup zahŕňa písanie kódu bez použitia objektov. Procedurálne programovanie je o písaní kódu s alebo bez podprogramov.

OOP učí každý programovací jazyk lepší kód a používa sa na dosiahnutie lepšieho výkonu a na písanie väčších projektov bez strachu, že sa pri ich riadení zmiasť. OOP vám dáva možnosť vytvárať objekty, ktoré možno opätovne použiť, aby ste ich vy alebo iní vývojári mohli použiť vo svojich projektoch bez toho, aby ste ich museli znova a znova opakovať. OOP odstraňuje bariéry a zložitosť pri písaní a správe veľkých aplikácií.

PHP nám umožňuje písať aplikácie 2 rôznymi spôsobmi, prvý je procedurálny a druhý je objektovo orientovaný. Ak stále nerozumiete rozdielu medzi týmito dvoma prístupmi, pozrime sa na tieto časti kódu - rovnaký príklad napísaný v rôznych prístupoch.

Procedurálne:

$user_input = $_POST['pole'];
$filtrovaný_obsah = filter($user_input); //filtrovanie vstupu používateľa
mysql_connect("dbhost","dbuser","dbpassword"); //databáza
mysql_select_db("názov databázy");
$sql = "nejaký dotaz";
$vysledok = mysql_query($sql);
while ($data = mysql_fetch_assoc())
{
proces($data);
}
process_user_input($filtrovaný_obsah);

A tu je rovnaký kus kódu pomocou OOP:

$vstupny_filter = novy filter();
$input_filter->filter_user_input(); //filtrovanie používateľských vstupov
$db = new dal("mysql"); // vrstva prístupu k údajom
$db->connect($dbconfig);//používame mysql
$vysledok = $db->execute($sql);
ReportGenerator::makereport($result); //spracovať údaje
$model = new Postmodel($filter->get_filtered_content());
$model->insert();

Ak sa pozriete pozorne na tieto 2 časti kódu, všimnete si, že kód používajúci OOP je čitateľnejší a ľahšie pochopiteľný.

OOP kód je lepšie usporiadaný, pretože je jasné, ktorý objekt je čím spracovávaný. Veľké aplikácie napísané na procedurálnom prístupe sú po vydaní niekoľkých verzií takmer nemožné vnímať. Samozrejme, môžete dodržiavať prísne pravidlá pre písanie kódu, no sú schválené miliónmi vývojárov, ktorí vedia, že vám to neposkytne konečnú kontrolu a použiteľnosť projektu, ak vo svojom programe nepoužívate OOP.
Takmer všetky veľké aplikácie sú napísané pomocou objektovo orientovaných aplikácií
prístup.

Na základe vyššie uvedeného môžeme využiť výhody používania OOP:

OOP bol vytvorený, aby uľahčil život vývojárom. Pomocou OOP môžete rozdeliť svoje veľké problémy na menšie problémy, ktoré je oveľa jednoduchšie vyriešiť.
Základnou požiadavkou OOP je, že čokoľvek chcete urobiť, urobte z toho objekt. Objekty sú jeden malý kúsok kódu, ktorý môže zoskupovať údaje a vlastnosti. V aplikáciách všetky objekty navzájom interagujú.

OOP možno považovať za lepšie z rôznych uhlov pohľadu, najmä ak je pre vás dôležitý čas vývoja a následný vývoj aplikácie.
Hlavné výhody používania OOP možno vyjadriť ako:

* Opätovné použitie: Objekt je logický objekt, ktorý má súbor vlastností a metód a môže interagovať s inými objektmi. Objekt môže byť úplne nezávislý alebo môže závisieť od iných objektov. Objekt sa zvyčajne vytvára na vyriešenie konkrétnych nastolených problémov. Preto, keď sa iní vývojári stretnú s podobnými problémami, môžu vašu triedu zapojiť do svojho projektu a použiť ju bez obáv, že to naruší ich vývojový proces. Vyhnete sa tak DRY, čo znamená Don't Repeat Yourself (neopakujte sa). V procedurálnom alebo modulárnom programovaní je opätovné použitie možné len súhrnne.

* Refaktorovanie: Keď potrebujete použiť refaktoring v projekte, OOP vám dáva maximálnu výhodu, pretože všetky objekty sú malé prvky a obsahujú svoje vlastnosti a metódy ako súčasť samých seba. Vďaka tomu je refaktorovanie relatívne ľahko použiteľné.

* Rozšíriteľnosť: Ak potrebujete rozšíriť funkčnosť vášho projektu, môžete dosiahnuť lepšie výsledky s OOP. Jednou z hlavných vlastností OOP je rozšíriteľnosť. Na pridanie funkčnosti môžete použiť refaktorovanie objektov. Počas práce na ňom môžete stále držať
predchádzajúca kompatibilita objektu - takže môžete dobre pracovať so starým kódom. Alebo môžete objekt rozšíriť a vytvoriť úplne nový, ktorý bude obsahovať všetky potrebné vlastnosti a metódy nadradeného objektu, od ktorého je nový odvodený, a potom k nemu pridať nové funkcie. Toto sa nazýva „dedičnosť“ a je to veľmi dôležitá vlastnosť OOP.

* podpora: objektovo orientovaný kód sa ľahšie udržiava, pretože
riadi sa veľmi prísnymi konvenciami kódovania a je napísaný zrozumiteľným spôsobom.
Napríklad, keď vývojár pridáva, prerába alebo ladí kód, môže ľahko nájsť vnútornú štruktúru kódu a z času na čas kód udržiavať. Navyše, keď vo vašom prostredí pracuje vývojový tím, OOP môže byť najlepším riešením, pretože svoj kód môžete po rozdelení na malé časti distribuovať medzi členov tímu. Tieto malé časti môžu byť vyvinuté ako samostatné entity, takže vývojári môžu pracovať takmer nezávisle od seba. V konečnom dôsledku nebude ťažké spojiť všetky časti do jednej aplikácie.

* Efektívnosť: Myšlienka OOP bola v skutočnosti navrhnutá tak, aby zefektívnila a zjednodušila proces vývoja. Na vytvorenie efektívnejšieho a lepšieho kódu bolo vyvinutých niekoľko návrhových vzorov.
A čo viac, v OOP môžete premýšľať o svojich rozhodnutiach pohodlnejšie ako v procedurálnom prístupe. Keďže svoj problém rozložíte na niekoľko malých problémov a na každý nájdete riešenie zvlášť, veľký problém sa vyrieši sám.

P.S moja prvá habratopická, ak sa vám bude páčiť, knihu preložím ďalej, keďže pre mňa je celkom zaujímavá a poučná

11. marca 2010 o 11:37 hod

OOP s príkladmi (1. časť)

  • Vzdelávací proces v IT

Z vôle osudu si musím na univerzite prečítať špeciálny kurz o dizajnových vzoroch. Špeciálny kurz je povinný, preto mi študenti prídu veľmi odlišní. Samozrejme, sú medzi nimi aj cviční programátori. Ale, bohužiaľ, väčšina z nich má problém čo i len pochopiť základné pojmy OOP.

Aby som to mohol urobiť, pokúsil som sa vysvetliť základné pojmy OOP (trieda, objekt, rozhranie, abstrakcia, zapuzdrenie, dedičnosť a polymorfizmus) pomocou viac-menej živých príkladov.

Prvá časť, uvedená nižšie, sa zaoberá triedami, objektmi a rozhraniami.
ilustruje zapuzdrenie, polymorfizmus a dedičnosť

Základné pojmy OOP

Trieda
Predstavte si, že navrhujete auto. Viete, že auto musí obsahovať motor, odpruženie, dva svetlomety, 4 kolesá atď. Tiež viete, že vaše auto musí byť schopné zdvihnúť sa a spomaliť, zatočiť a pohnúť sa dozadu. A čo je najdôležitejšie, presne viete, ako sa vzájomne ovplyvňujú motor a kolesá, podľa akých zákonov sa pohybuje vačkový hriadeľ a kľukový hriadeľ a tiež ako sú usporiadané diferenciály. Ste si istí svojimi znalosťami a začnete navrhovať.

Opisujete všetky časti, ktoré tvoria vaše auto, a ako tieto časti navzájom spolupracujú. Okrem toho popisujete, čo musí používateľ urobiť, aby auto zabrzdilo alebo rozsvietilo diaľkové svetlá. Výsledkom vašej práce bude nejaký náčrt. Práve ste vyvinuli to, čo nazýva OOP Trieda.

Trieda je spôsob popisu entity, ktorý definuje stav a správanie závislé od tohto stavu, ako aj pravidlá interakcie s touto entitou (zmluva).

Z programátorského hľadiska možno na triedu nazerať ako na súbor údajov (polia, atribúty, členy triedy) a funkcií na prácu s nimi (metódy).

Z hľadiska programovej štruktúry je trieda komplexný dátový typ.

V našom prípade trieda zobrazí entitu - auto. Atribúty triedy budú motor, odpruženie, karoséria, štyri kolesá atď. Metódy triedy budú „otvoriť dvere“, „stlačiť plynový pedál“ a tiež „načerpať časť benzínu z plynovej nádrže do motora“. Prvé dve metódy sú k dispozícii na vykonanie inými triedami (najmä triedou "Driver"). Ten popisuje interakcie v rámci triedy a nie je k dispozícii používateľovi.

V nasledujúcom texte, hoci je slovo „používateľ“ spojené s Klondike Solitaire a Microsoft Word, budeme používateľov označovať ako tých programátorov, ktorí používajú vašu triedu, vrátane vás. Osoba, ktorá je autorom triedy, budeme volať vývojár.

Objekt
Odviedli ste skvelú prácu a stroje navrhnuté podľa vašich výkresov schádzajú z montážnej linky. Tu sú, stojace v párnych radoch na továrenskom dvore. Každý z nich presne opakuje vaše kresby. Všetky systémy interagujú presne tak, ako ste navrhli. Ale každé auto je jedinečné. Všetky majú číslo karosérie a motora, ale všetky tieto čísla sú iné, autá sa líšia farbou a niektoré majú dokonca odliatky namiesto vylisovaných kolies. Tieto autá sú v podstate predmety vašej triedy.

objekt (inštancia) je jediná inštancia triedy, ktorá má špecifický stav a správanie, ktoré je úplne definované triedou.

Jednoducho povedané, objekt má špecifické hodnoty atribútov a metódy, ktoré fungujú na týchto hodnotách na základe pravidiel definovaných v triede. V tomto príklade, ak je trieda nejaké abstraktné auto zo „sveta myšlienok“, potom objekt je konkrétne auto stojace pod vašimi oknami.

Rozhranie
Keď sa priblížime ku kávovaru alebo si sadneme za volant, začneme s nimi komunikovať. Zvyčajne k interakcii dochádza pomocou určitého súboru prvkov: slot na príjem mincí, tlačidlo na výber nápoja a dávkovač šálok v kávovare; volant, pedále, radiaca páka v aute. Vždy existuje nejaký obmedzený súbor ovládacích prvkov, s ktorými môžeme interagovať.

Rozhranie je súbor metód tried dostupných na použitie inými triedami.

Je zrejmé, že rozhranie triedy bude množinou všetkých jej verejných metód spolu so sadou verejných atribútov. Rozhranie v podstate špecifikuje triedu a jasne definuje všetky možné akcie na nej.
Dobrým príkladom rozhrania môže byť prístrojová doska auta, ktorá umožňuje volať metódy, ako je zrýchlenie, brzdenie, zatáčanie, radenie prevodových stupňov, zapnutie svetlometov atď. Teda všetky úkony, ktoré môže iná trieda (v našom prípade vodič) vykonávať pri interakcii s autom.

Pri popise rozhrania triedy je veľmi dôležité nájsť rovnováhu medzi flexibilitou a jednoduchosťou. Trieda s jednoduchým rozhraním sa bude ľahko používať, no vyskytnú sa problémy, ktoré pomocou nej nebude možné vyriešiť. Zároveň, ak je rozhranie flexibilné, bude s najväčšou pravdepodobnosťou pozostávať z pomerne zložitých metód s veľkým počtom parametrov, ktoré vám umožnia urobiť veľa, ale jeho používanie bude spojené s veľkými ťažkosťami a rizikom chyba, niečo zmätené.

Príkladom jednoduchého rozhrania je automobil s automatickou prevodovkou. Jeho riadenie si veľmi rýchlo osvojí každá blondínka, ktorá absolvovala dvojtýždňový vodičský kurz. Na druhej strane, na zvládnutie ovládania moderného osobného lietadla je potrebný niekoľkomesačný či dokonca rok tvrdý tréning. Nechcel by som byť na palube boeingu, na ktorom lieta človek, ktorý má s letom dvojtýždňové skúsenosti. Na druhej strane nikdy nedonútite auto vzlietnuť a odletieť z Moskvy do Washingtonu.

Pokryjeme pojmy ako objektovo orientované programovanie, triedy PHP, konštruktory PHP, deštruktory PHP, magické metódy PHP atď. Táto príručka je určená pre začiatočníkov a skúsených programátorov, ktorí sa chcú naučiť PHP OOP od základnej úrovne.

Jednou z najvýznamnejších zmien v PHP 5 je zavedenie plne objektového modelu, ktorý zlepšuje výkon. Niektoré z dôležitých nových funkcií pridaných do PHP 5 sú konečné a abstraktné metódy, triedy, rozhrania, klonovanie a magické metódy. V tomto návode na OOP PHP sa pozrieme na príklady použitia každého z nich.

V objektovo orientovanom programovaní sa s objektom zaobchádza rovnakým spôsobom ako s referenciami alebo ukazovateľmi. To znamená, že každá nová premenná obsahuje odkaz na objekt, nie kópiu celého objektu.

Najťažšie pochopiteľný koncept sú základy OOP, keďže sa líšia od bežného programovania v PHP. Keď však pochopíte základné princípy, samotný model sa pre vás stane jednoduchým a zrozumiteľným.

Čo je OOP v PHP?

Keďže pojem objektovo orientované programovanie začína slovom „objekt“, môžeme povedať, že ide o špeciálny typ programovania, v ktorom sa vytvárajú a používajú objekty.

Tu je vysvetlenie PHP OOP pre figuríny. Pozrite sa na svet okolo nás, je plný predmetov. Slnko, mesiac, autá, stromy, domy atď. atď. Toto všetko sú predmety, majú atribúty a funkcie. V procese myslenia operujeme s predmetmi. Keď hovoríme o aute, nemyslíte na kolesá, motor, sedadlá, dvere, myslíte na auto ako na vec, ktorou je. Jednoducho povedané, premýšľate v pojmoch subjektu alebo objektu. Objektová orientácia je reprezentácia pri programovaní prvkov ako objektov.

Auto je objekt. Má atribúty farby, veľkosti, hmotnosti a funkcie pohybu. Akýkoľvek objekt bez funkčnosti bude zbytočný. V OOP programátor používa objekty; každý objekt má nejaké atribúty a funkcie. Vo všeobecnosti programovanie spočíva v vytváraní modulov pomocou objektov.

Jednoduchá definícia objektovo orientovaného programovania:

Objektovo orientované programovanie je programovanie založené na objektoch, ktoré obsahujú dáta (atribúty) a metódy (funkčné), ktoré tieto dáta spracúvajú. Objekty sú dátovým typom definovaným programátorom a programátorom definované sú aj interakcie medzi rôznymi objektmi.

Inými slovami, OOP umožňuje programátorovi zoskupiť podobné úlohy do tried, pričom trieda môže obsahovať dáta a funkcie na prístup k týmto dátam, ktoré spolu súvisia.

Základy OOP v PHP vám pomôžu vyvinúť kód, ktorý sa ľahšie udržiava a spravuje. Čím je kód čistejší a čitateľnejší, tým je pravdepodobnejšie, že bude znovu použitý. Výsledkom je, že dizajnové vzory môžu byť aplikované na systém. V OOP sa moduly vytvárajú a používajú podľa požiadaviek. Pomocou objektovo orientovaného programovania v PHP môžeme vytvárať aplikácie pre stránky, ktoré majú modulárnu štruktúru.

Dôležité pojmy v príručke PHP OOP:

Nasleduje všeobecná definícia niektorých dôležitých pojmov, ktoré sa často používajú v objektovo orientovanom PHP.

Trieda

V OOP PHP je trieda dátový typ definovaný programátorom. Trieda obsahuje dáta a funkcie na prácu s týmito dátami. Údaje a funkcie majú súkromný prístupový identifikátor. To znamená, že nie sú viditeľní mimo triedy. Trieda je šablóna alebo šablóna, z ktorej môžete vytvoriť toľko kópií alebo inštancií, koľko potrebujete.

Objekt

Objekt je známy aj ako inštancia. Keď je nastavená inštancia triedy, vytvorí sa objekt. Ak je trieda vzor, ​​potom objekt je hotový produkt vytvorený zo vzoru. Po definovaní triedy je možné z nej vytvoriť mnoho objektov.

členská premenná

Premenné definované v triede sa nazývajú členské premenné. Toto sú vlastne údaje obsiahnuté v tejto triede, môžu byť upravené iba funkciami tejto triedy. Členské premenné sú zvyčajne viditeľné iba pre danú triedu a sú skryté pred ostatnými triedami.

členská funkcia

Funkcie definované v triede sa nazývajú členské funkcie. Nie sú viditeľné ani pre iné triedy. Používajú sa na zmenu členských premenných, na prístup k údajom objektu.

Konštruktér

Konštruktor je špeciálny typ členskej funkcie. Keď je nastavená trieda, vytvorí sa objekt, táto funkcia sa zavolá automaticky a priradí počiatočné hodnoty premenným triedy.

Deštruktor

Ide o špeciálny typ funkcie, ktorá sa volá automaticky pri odstránení objektu.

Dedičnosť

V PHP 5 je dedičnosť OOP proces, ktorým trieda (podtrieda) získa všetky atribúty a funkcie inej triedy (nadtriedy).

Super trieda

Tiež známa ako základná alebo rodičovská trieda, je dedená jednou alebo viacerými podtriedami.

Podtrieda

Podtrieda alebo odvodená trieda, podtrieda dedí z nadtriedy.

Polymorfizmus

Toto je fenomén v OOP, kde jedna funkcia môže byť použitá na rôzne účely.

Zapuzdrenie

Jeden z najdôležitejších konceptov objektovo orientovaného programovania. Údaje a funkcie, ktoré s týmito údajmi pracujú, sú vzájomne prepojené a nie sú viditeľné pre iné funkcie.

Abstrakcia

Abstrakcia znamená, že detaily implementácie funkcií alebo tried nie sú viditeľné.

, čo znamená, že funkcie, ktoré majú rovnaký názov, ale odlišný počet argumentov, fungujú odlišne.

Triedy a predmety:

Trieda a objekt sú široko používané ako synonymické pojmy v objektovo orientovanom programovaní, ale zásadne sa navzájom veľmi líšia. Trieda je šablóna, vzor alebo forma a objekt je produkt alebo časť odliata z tejto konkrétnej šablóny alebo formy.

Vezmite si napríklad dom. Trieda je základom domova; má rozmery, tvar, počet dverí, priechodov atď. Ale toto je len projekt, nie samotný dom. Keď je fyzický dom postavený na základe informácií obsiahnutých v pláne, potom je to objekt.

Predtým bol objektom hromada dreva, tehál, cementu atď., z ktorej bol podľa informácií z plánu postavený dom alebo objekt:

Trieda v PHP OOP je plán alebo šablóna, pomocou ktorej sa vytvorí inštancia triedy, vytvorí sa objekt. Po vytvorení triedy môžeme vytvoriť toľko objektov, koľko chceme. Na obrázku vyššie bolo vytvorených päť objektov (domov) z jednej triedy (plánu). Objekt sa bude vždy riadiť pokynmi uvedenými v triede použitej na jeho vytvorenie.

Výhody OOP v PHP:

  1. Vylepšená architektúra a čistejší kód

Objektovo orientované PHP je lepšie katalogizované a ľahšie sa balí, čo umožňuje optimálnu architektúru. Zvyčajne je každá trieda uložená v samostatnom súbore. Procedurálne jazyky sa vyznačujú zložitým kódom, ktorý je veľmi ťažké prečítať alebo pochopiť. V OOP implementáciou objektov, ktoré obsahujú súkromné ​​údaje s jasne definovanými vzťahmi medzi objektmi, je kód čitateľný a čistý.

  1. Opätovné použitie

Objektovo orientované programovanie umožňuje opätovné použitie kódu. Objekty vytvorené raz je možné použiť znova a znova. Programy je možné zostaviť kombináciou pracovných modulov namiesto písania všetkého od začiatku. To šetrí čas a zvyšuje produktivitu.

  1. Jednoduchá údržba a upgrade

Objekty majú svoje vlastné dáta a funkcie, celá ich štruktúra je kompaktná a stručná, čo uľahčuje vykonávanie zmien v kóde. Konvenčné procedurálne programovanie vytvára kód, kde je veľmi ťažké nájsť bod na zmenu. V OOP PHP môžeme pridať novú vlastnosť a potom pridať súvisiace metódy na správu tejto vlastnosti.

  1. Zapuzdrenie

Zapuzdrenie znamená, že hodnoty premenných objektu nie sú zvonku viditeľné, a preto je implementovaná bezpečnosť údajov. Ak však vznikne potreba, k údajom je možné pristupovať pomocou modifikátorov prístupu. Na vytvorenie bezpečných programov môžu byť údaje a členské funkcie v triede skryté pred ostatnými triedami. Po vytvorení objektu nie sú potrebné žiadne informácie o implementácii na jeho použitie.

  1. Dedičnosť

Dediaca trieda získa všetky charakteristiky rodičovskej triedy a potom sa k nej pridajú jej vlastné charakteristiky. Podtrieda zdedí premenné a metódy nadtriedy. Môžeme rozšíriť použitie už existujúcich tried, ako aj odstrániť nepotrebný kód.

V tomto návode sa naučíte základy objektovo orientovaného programovania v PHP. Dozviete sa všeobecne o princípoch OOP a naučíte sa písať jednoduché skripty v PHP.

Vitajte pri prvej zo série lekcií OOP v PHP! Nasledovaním všetkých lekcií v tejto sérii sa dozviete o základných princípoch a konceptoch OOP a naučíte sa, ako rýchlo a jednoducho vytvárať užitočné aplikácie v PHP.

V tomto návode vás začnem privádzať do tempa a predstavím vám základné koncepty OOP. Naučíš sa:

  • čo je OOP
  • ako vám OOP môže pomôcť písať lepšie PHP skripty
  • niektoré základné pojmy ako triedy, objekty, metódy, premenné tried
  • ako začať písať PHP skript

Ste pripravení ponoriť sa do sveta objektov PHP? Potom pokračujte!

Čo je objektovo orientované programovanie?

Ak ste niekedy vytvorili svoje vlastné funkcie v PHP a používali ich, potom ste použili procedurálny štýl programovania. V procedurálnom programovaní zvyčajne vytvárate dátové štruktúry – čísla, reťazce, polia atď. - uložiť nejaké údaje a následne tieto štruktúry spracovať špeciálnymi funkciami, ktoré s týmito údajmi manipulujú.

Objektovo orientované programovanie alebo OOP sa posunulo ďalej, pretože tu ukladáme dátové štruktúry a funkcie, ktoré ich spracúvajú, do jedinej entity nazývanej objekt. Namiesto spracovania údajov pomocou nejakej funkcie načítate tieto údaje do objektu a potom zavoláte jeho metódy, aby ste s nimi manipulovali a získali požadovaný výsledok.

Objekty vytvorené pomocou OOP najčastejšie odrážajú skutočné entity. Ak napríklad vytvárate fórum pre svoju stránku, mali by ste vytvoriť objekt Member, ktorý bude uchovávať informácie o každom členovi fóra (meno, prihlasovacie meno, e-mailová adresa, heslo atď.), ako aj metódy, ktoré budú tieto informácie spracovávať. (registrácia, autorizácia, odhlásenie, zákaz atď.).

Prečo používať OOP?

Procedurálne a objektovo orientované sú dva rôzne spôsoby vykonávania tej istej veci. Tým nechcem povedať, že jeden z nich je lepší ako druhý – každý si píše, ako sa mu páči, takže tieto dva prístupy môžete dokonca jednoducho skombinovať v jednom scenári.

Tu sú však niektoré z výhod OOP pre vývojárov:

  • Je jednoduchšie odrážať skutočné situácie: ako som už uviedol vyššie, objekty odrážajú skutočné entity - ľudí, produkty, karty, články na blogu atď. To značne zjednodušuje úlohu, keď práve začínate navrhovať svoju aplikáciu, pretože účel každého objektu , rovnako ako cieľové vzťahy medzi objektmi budú jasné a zrozumiteľné.
  • Jednoduchšie písanie modulárnych programov: OOP je o písaní modulov. Rozdelením kódu do modulov sa vám bude jednoduchšie spravovať, ladiť a rozširovať.
  • Je jednoduchšie napísať kód, ktorý sa bude používať mnohokrát: písanie kódu, ktorý možno použiť viackrát, ušetrí čas pri písaní aplikácie a časom si dokonca môžete vytvoriť celú knižnicu takýchto modulov, ktoré môžete použiť v mnohých aplikácie. S OOP je písanie takéhoto kódu pomerne jednoduchšie, pretože dátové štruktúry a funkcie sú zapuzdrené v jedinom objekte, ktorý možno použiť ľubovoľne veľakrát.

Niektoré základné pojmy

Skôr ako začnete písať skripty, musíte dobre porozumieť pojmom ako trieda, objekt, premenná triedy a metóda.

triedy

Trieda je rámec pre objekt. Toto je časť kódu, ktorá definuje:

  • Typy údajov, ktoré budú obsahovať vygenerované objekty triedy
  • Funkcie, ktoré budú tieto objekty obsahovať.

Keď vytvoríte aplikáciu OOP, zvyčajne vytvoríte niekoľko tried, ktoré predstavujú rôzne typy entít vo vašej aplikácii. Ak chcete napríklad vytvoriť fórum, môžete vytvoriť triedy Fórum, Téma, Príspevok a Člen.

Objekty

Objekt je špeciálny typ premennej, ktorá sa vytvára prostredníctvom triedy. Obsahuje skutočné údaje a funkcie na manipuláciu s nimi. Z jednej triedy môžete vytvoriť toľko objektov, koľko chcete. Každá funkcia objektu je nezávislá od iného objektu, aj keď sú odvodené z rovnakej triedy.

Pre porovnanie so skutočnými entitami:

  • Trieda je rámec pre auto: definuje, ako bude auto vyzerať a pôsobiť, ale stále je to abstraktná entita.
  • Objekt je skutočné auto vyrobené z rámu: má skutočné vlastnosti (napríklad rýchlosť) a správanie (napríklad zrýchľovanie alebo brzdenie).

Poznámka: Objekt sa často označuje ako entita triedy a proces vytvárania objektu triedy sa označuje ako implementácia.

premenné triedy

Dátové hodnoty, ktoré sú uložené v objekte, sú uložené v špeciálnych premenných nazývaných premenné triedy. Premenné triedy úzko súvisia s jej objektom. Aj keď všetky objekty triedy majú rovnaké premenné, ich hodnoty sa môžu líšiť.

Metódy

Funkcie definované v triede a aplikované na objekty tejto triedy sa nazývajú metódy. Veľmi sa nelíšia od bežných funkcií – môžete im odovzdávať hodnoty, môžu obsahovať lokálne premenné a návratové hodnoty. Metódy však častejšie pracujú s objektovými premennými. Napríklad metóda login() na prihlasovanie používateľov do vášho fóra môže nastaviť hodnotu premennej triedy prihlásený na hodnotu true.

Ako vytvoriť triedu v PHP?

Teraz, keď už viete, čo sú triedy, metódy, premenné tried a objekty, je čas vytvoriť niekoľko tried a objektov v kóde PHP.

Najprv sa pozrime, ako vlastne potrebujete vytvoriť triedu. Skript na vytvorenie triedy v podstate vyzerá takto:

Trieda Názov triedy ( // (definícia triedy) )

Ak napríklad vytvárate triedu členov pre svoje fórum, napíšte:

Člen triedy ( // (definícia triedy) )

Je to dosť jednoduché. Prirodzene, táto trieda nebude robiť nič, kým do nej nepridáte premenné a metódy. Vyššie uvedený kód však vytvára platnú triedu PHP, ktorú možno použiť.

Základné pravidlo: vložte každú triedu do samostatného súboru s názvom, ktorý sa zhoduje s názvom triedy. Napríklad vložte triedu Member do súboru Member.php a uložte ju do priečinka, povedzme class.

Ako vytvoriť objekty v PHP?

Objekt môžete vytvoriť pomocou nového kľúčového slova:

Nový názov triedy()

Tento kód vytvorí objekt triedy ClassName. Neskôr budete musieť tento objekt použiť, takže ho musíte uložiť do premennej. Vytvorme si napríklad objekt triedy Member a uložme ho do premennej $member:

$člen = nový člen();

Môžeme tiež vytvoriť iný objekt rovnakej triedy:

$člen2 = nový člen();

Aj keď sme vytvorili tieto dva objekty z rovnakej triedy, premenné $member a $member2 sú na sebe nezávislé.

Vytváranie premenných tried

Teraz, keď vieme, ako vytvárať triedy a objekty tried, pozrime sa, ako vytvoriť premenné triedy. Existujú 3 prístupové identifikátory pre premenné triedy, ktoré možno pridať do triedy:

  • Verejné premenné triedy (public): dostupné - t.j. možno ich čítať a/alebo upravovať – kdekoľvek v skripte, bez ohľadu na to, kde sa tento kód nachádza – v triede alebo mimo nej
  • Súkromné ​​premenné triedy (súkromné): dostupné len pre metódy triedy. Najlepšie je nastaviť premenné triedy ako súkromné, aby ste oddelili objekty od zvyšku kódu.
  • Chránené premenné triedy (chránené): dostupné pre metódy vlastnej triedy ako aj metódy zdedených tried (o dedičnosti si povieme neskôr).

Ak chcete vytvoriť premennú triedy, napíšte kľúčové slovo public, private alebo protected a potom zadajte názov premennej:

Trieda ClassName (verejné $propertyName; súkromné ​​$propertyName; chránené $propertyName; )

Pridajme do našej triedy Member premennú verejnej triedy na uloženie používateľského mena:

Člen triedy ( public $username = ""; )

Všimnite si, že sme inicializovali našu premennú triedy, jej hodnotou je prázdny reťazec „“. To znamená, že keď sa vytvorí nový používateľ, používateľské meno bude predvolene obsahovať prázdny reťazec. Rovnako ako v prípade bežných premenných v PHP, premenné triedy nemusia byť inicializované, ale je lepšie nebyť lenivý. Ak neinicializujete premennú triedy, jej hodnota je štandardne null.

Prístup k premenným triedy

Na prístup k premennej objektu použite operátor ->:

$object->propertyName

Vyskúšajme. Napíšme skript, ktorý deklaruje triedu Member a premennú triedy, vytvorí objekt tejto triedy a potom nastaví hodnotu premennej triedy a zobrazí ju na obrazovke:

username="fred"; echo $member->username; // Tlač "Fred" ?>

Spustite tento kód, zobrazí sa reťazec "Fred", hodnota premennej triedy $member->username. Ako vidíte, s objektovou premennou pracujete rovnakým spôsobom ako s normálnou premennou – môžete jej dať hodnotu a prečítať ju.

Pridávanie metód do triedy

A čo vytváranie metód? Ako som už spomenul, metódy sú normálne funkcie, ktoré sú súčasťou triedy. Možno vás teda neprekvapí, že sú vytvorené pomocou rovnakého kľúčového slova. Jediný rozdiel oproti vytváraniu bežných funkcií je v tom, že do jeho deklarácie môžete pridať aj jeden z prístupových identifikátorov (verejný, súkromný, chránený). V tomto sú metódy podobné premenným triedy:

Trieda Názov triedy ( public function methodName() ( // (kód) ) súkromná funkcia methodName() ( // (kód) ) chránená funkcia methodName() ( // (code) ) )

Poznámka: rovnako ako v prípade premenných triedy, verejné metódy možno volať odkiaľkoľvek, súkromné ​​metódy možno volať len v rámci triedy a chránené metódy možno volať zo samotnej triedy a jej nástupcu.

Skúsme do našej triedy pridať nejaké metódy a premenné triedy:

  • súkromná premenná triedy $loggedIn na identifikáciu používateľa, t.j. či šiel alebo nie
  • metóda login(), ktorá sa prihlási do fóra nastavením hodnoty premennej triedy $loggedIn na hodnotu true,
  • metóda logout(), ktorá sa odhlási z fóra nastavením hodnoty premennej triedy $loggedIn na false,
  • metóda isLoggedIn(), ktorá vráti hodnotu premennej triedy $loggedIn.

Tu je náš kód:

prihlásený = true; ) verejná funkcia logout() ( $this->loggedIn = false; ) verejná funkcia isLoggedIn() ( return $this->prihlásené; ) ) ?>

Možno ste si všimli, že sme použili nové kľúčové slovo $this. V kontexte objektových metód špeciálna premenná $this odkazuje na samotný objekt. Použitím $this v objektovej metóde môže metóda pristupovať k akejkoľvek premennej triedy a objektovej metóde.

Napríklad metóda login() môže pristupovať k premennej triedy $loggedIn objektu cez $this->loggedIn.

Mimochodom, naša premenná triedy je súkromná, takže ju nemožno volať zo žiadnej časti skriptu, ale iba z metód login(), logout() a isLoggedIn(). Je to dobrý prístup, pretože vnútorná časť objektu (napríklad ako presne sa zaznamenáva, či je používateľ prihlásený alebo nie) je oddelená od zvyšku kódu. Vždy, keď je to možné, skúste použiť premenné súkromnej triedy, aby boli vaše objekty samostatné, prenosné a bezpečné.

Poznámka: premenná triedy $username v našom príklade je verejná. Urobil som to len preto, aby som ukázal, ako môžete pristupovať k premenným triedy objektu. V skutočných projektoch je pravdepodobnejšie, že táto premenná bude súkromná a vytvorí sa špeciálne premenné verejnej triedy na nastavenie hodnôt používateľského mena v prípade potreby.

Použitie metód

Ak chcete volať metódu na objekte, použite operátor ->, s ktorým ste sa oboznámili.

$object->methodName()

Funguje to rovnako ako volanie normálnej funkcie. Argumenty môžete zadať v zátvorkách (samozrejme za predpokladu, že sú potrebné nejaké argumenty), volanie metódy môže tiež vrátiť určité hodnoty, ktoré potom môžete použiť.

prihlásený = true; ) verejná funkcia logout() ( $this->prihlásený = false; ) verejná funkcia isLoggedIn() ( return $this->prihlásený; ) ) $člen = nový člen(); $member->username = "Fred"; echo $member->username . " je " . ($member->
"; $member->login(); echo $member->username . " je " . ($member->isLoggedIn() ? "prihlásený" : "odhlásený") ."
"; $member->logout(); echo $member->username . " je " . ($member->isLoggedIn() ? "prihlásený" : "odhlásený") ."
"; ?>

Tento skript zobrazí nasledovné:

Fred je prihlásený Fred je prihlásený Fred je odhlásený

Funguje to takto:

  1. Po definovaní triedy Member sme vytvorili jej objekt a uložili ho do premennej $member. Tiež sme nastavili premennú triedy $username tohto objektu na "Fred".
  2. Potom sme zavolali metódu $member->isLoggedIn(), aby sme zistili, či je používateľ prihlásený alebo nie. Táto metóda jednoducho vráti hodnotu premennej triedy $loggedIn. Keďže predvolená hodnota tejto premennej triedy je false, volanie $member->isLoggedIn() bude mať za následok false, takže sa zobrazí správa „Fred je odhlásený“.
  3. Potom zavoláme metódu login(). Nastaví premennú triedy $loggedIn na hodnotu true.
  4. Teraz, keď sa zavolá metóda $member->isLoggedIn(), vráti sa true a zobrazí sa správa „Fred je prihlásený“.
  5. Zavolajme metódu logout(), ktorá nastaví hodnotu vlastnosti $loggedIn na false.
  6. Tretíkrát zavoláme metódu $member->isLoggedIn(). Teraz vráti hodnotu false, pretože hodnota vlastnosti $loggedIn je opäť nastavená na hodnotu false. Takže sa znova zobrazí správa „Fred je odhlásený“.

Poznámka: v prípade, že ste prvýkrát videli toto: ?:, je ternárny operátor. Toto je zjednodušená verzia blokov if...else. O takýchto operátoroch sa môžete dozvedieť.

závery

V tomto návode ste sa naučili základy OOP v PHP. Dozvedeli ste sa o veciach ako:

  • čo je OOP a prečo je užitočné ho používať
  • koncepcie tried, objektov, premenných tried a metód
  • ako vytvárať triedy a objekty
  • ako vytvárať a používať premenné triedy
  • koncepty prístupových identifikátorov verejný, súkromný, chránený
  • ako vytvoriť a použiť metódy triedy

Veľa ste sa už naučili a ešte veľa sa naučíte v nasledujúcich lekciách. Ak ste však dobre prepracovali všetky príklady, ktoré som uviedol, máte pevný základ. Môžete začať vytvárať OOP aplikácie.