PHP polimorfizmus, kapszulázáshoz és szilárd

Úgy döntöttem, hogy írjon egy rövid emlékeztető, hogy magát és másokat, és még a nyitott terek Ineta zamudreno szeretnek festeni.

Polimorfizmus PHP

PHP nyelvet támogat polimorfizmus az értelemben, hogy lehet használni a helyet példányban a szülő alosztály példányok. Az a tény, hogy csak az egyik módszer egy adott név lehet jelen minden osztályban. például:

// töltőanyag-keverék kiadványok objects származó közzétételi
$ Publications [] = new News ();
$ Publications [] = new Hirdetmény ();

foreach ($ publikációk $ kiadvány) if ($ kiadvány instanceof közzététele) $ Publication-> do_print (); // tudjuk bátran a nyomtatandó adatok
>
mást // kivétel vagy hibafeldolgozást
>
>

A lényeg itt - az utolsó rész. Hogy ez a lényege polimorfizmus. Mi ugyanazt a kódot használja a tárgyak különböző osztályok.

Példa a gyakorlatban: a felhasználó szeretné nyomon követni a legújabb frissítéseket kiadványok, és nem számít, legyen az egy cikket, hírt, vagy valami mást.

Kapszuiázássai PHP

Tokozás képest az autó teljesítménye a szempontból egy tipikus vezető. Sok vezető nem érti a részleteket a belső szerkezet a gép, de futtatni pontosan úgy, ahogy eredetileg tervezték. Tegyük fel, hogy nem tudom, hogy a motor, a fék és kormánymű - van egy speciális interfész, amely automatizálja és egyszerűsíti ezeket a bonyolult műveleteket. A fentiekből is vonatkozik a tokozás és a PFSZ - sok részletet a „belső berendezés” rejtve maradnak a felhasználó, amely lehetővé teszi számára, hogy összpontosítson a konkrét problémák megoldására. Az OOP ezt a képességet biztosítja osztályok, tárgyak és a különböző kifejezési hierarchikus viszonyok között.

A szoftver értelemben beágyazás - egy rejtett változót az osztályban a felhasználó. Ie Az összes változó (tulajdonságok) az osztály csinálsz rejtett (magán) és módszerek nyílt (nyilvános). Ie Meg kölcsönhatásba léphet osztály tulajdonságait módszerekkel.
A szépség ez a megközelítés, hogy a módszer kód beillesztése, hogy ellenőrizze az esetleges hibákért, és akkor nem gondolt, amikor a módszert nevezik.

kapcsolatos SZILÁRD

Szeretném tisztázni ALAPELVEI Liskov helyettesítés és függőség inverzió, mert elméletileg nehéz megérteni, mi a különbség a kettő között, de megpróbálom.

absztrakt osztály közzétételi <
A végső védett funkció getId ()id;>
>

osztály News nyúlik közzététele public function printId () echo 'News ID:'. $ This-> getId ();
>
>
osztály cikk kiterjeszti közzététele public function printId () echo 'cikk ID:'. $ This-> getId ();
>
>

Liskov helyettesítés szól:

„Funkciók használó alap típus, képesnek kell lennie arra, hogy használja a altípusa az alap típus, nem tudni róla.” - ez azt jelenti, hogy ha hívjuk egy adott eljárás Claes, akkor ez az osztály kell helyettesíteni (polimorfizmus):

„Alosztályok nem helyettesíti a viselkedését az alap osztály altípusai kell egészítenie alaptípusa ..” - ami azt jelenti, hogy ki kell terjeszteni a szülő osztály (a kiterjesztése), de felülírja az alap osztály módszerekkel nem lehet (beágyazás + így írtunk egy végső, lásd fent ..).

Függőség inverzió kimondja:

„Függőségek a rendszeren belül alapulnak absztrakciók” - azt jelenti, hogy a közzétételi osztályba csak absztrakt, vagy felület, és akkor figyelembe kell átvinni függvényében (polimorfizmus - lásd fent printPublicationId kéri.).

„Felső szintű modul független az alacsonyabb szintű modulok Abstractions nem függhet a részleteket Részletek attól kell függenie absztrakciók ..” - azt jelenti, hogy öröklik az absztrakt osztály (vagy felület) is lehetséges, és örökölni az absztrakt osztály a szokásos nem (különben lehet bejutni a kövér seggét öröklés).