Startup osztályok php alkalmazás, dof

előszó

Modern web-alkalmazások jellemzően több osztályok, amelyek mindegyike megoldja bizonyos feladat.

Tehát alapértelmezés szerint, ha egyes alkalmazásaink azt kell használni egy osztály, mondjuk, MyClass. meg kell győződnünk arról, hogy a fájl, amely leírja az osztály már korábban kapcsolatban szükségessé nyilatkozatok vagy a következők:







Ie minden osztály (csakúgy, mint a felület, és így tovább.), fogunk használni az alkalmazás, akkor kell „kapcsolódni” vagy előre „az út mentén.” Az egyik probléma az, hogy az alkalmazások gyakran nem lineáris szerkezetű, és nem mindig lehet tudni előre, hogy melyik a több osztály (ami potenciálisan felhasználható végrehajtása során a forgatókönyvet) lesz igazán szó, és milyen - nem. Csatlakozó előre minden potenciálisan alkalmazott osztályok vezet hatékony felhasználása a tárolási erőforrások, és a „kézi” kapcsolat jobb osztályok „az út mentén” valószínűleg vezet a használata december trükkök formájában vizsgálatot a körülmények és a felvétel a szereplők, és ennek következtében - kód bonyolultságát és nehezen olvasható.

Ebben a cikkben fogunk összpontosítani pontosan automatikus betöltését osztályok PHP alkalmazás.

azt jelenti, SPL

A PHP (mivel kb 5-ös verzió) volt egy nagy lehetőséget, hogy automatikusan letöltse korábban betöltött osztályok. Ie Amikor a PHP értelmező találkozik hivatkozásokat a kódot egy osztály, akkor elméletileg próbálja betölteni az adott osztály. Ahhoz azonban, hogy ez lehetséges, még mindig van, hogy leírja egy bizonyos funkciót (módszer), amely pontosan meghatározza, hol a leírás a kívánt osztályban. Általában ez a funkció rakodó.

Nem fogjuk vizsgálni itt használatát funkcióban __autoload (); t. Hogy. Ez az út most úgy kissé elavult, és szinte teljesen kiszorította mindenütt révén egy sor az SPL.

Írja le és regisztrálja a rakodó funkciót többféleképpen, például:

A beépített függvény spl_autoload_registered (); Itt lehet regisztrálni rakodó funkció minden __autoload (). t. e. regisztrálni egy felhasználó által definiált függvény rakodó, mint az auto rakodó. Elméletileg tudjuk regisztrálni, és több funkció letöltők, ha szükséges. A mi példánkban regisztrálni néhány névtelen függvényt, amely elvégzi osztály betöltése az átadott osztály nevét.

Úgy működik, mint ez:
Amikor a PHP értelmező találkozik az ismeretlen kód az osztály neve, akkor próbálja meg betölteni a sorozatban segítségével mindazok regisztrált autoloaders. Ie Minden funkció-rakodó egy időben, mint a paraméter (ebben az esetben - $ classname) kerül át a teljes * a neve ennek a „ismeretlen” osztály, akkor a függvény rakodó megpróbálhatod megtalálni acc. fájl, amely leírja ezt az osztályt, és kapcsolja be. Ha egyik regisztrált F-TIONS letöltők nem találtunk, és csatlakoztassa az osztály, végül ez fog dobni hiba hogy egy osztály nem található.







Ebben a példában azt is, hogy a mi alkalmazás fájljait a leírása az osztályok vannak elrendezve egy bizonyos mappa / my_classes_folder /. és még a class fájl nevének meg kell egyeznie a neve az osztály is. Ie megegyezés alapján, hogy letöltse a példát, MyClass mi kell hozzá, hogy az utat / my_classes_folder / osztály neve (MyClass), majd hozzáadjuk a .php kiterjesztés és tartalmazzák vele igényelnek. Mi, sőt, a példa a fent leírt. Minden ellenőrzi a létezését a fájlok és utak illetve, és így itt eltekintünk az egyszerűség kedvéért.

Azonban még itt is vannak árnyalatok, például mi van, ha az osztályok a mellékletben van néhány bonyolult hierarchikus szerkezet vagy nem koncentrálódik egy alkönyvtár, vagy nem esik ilyen megállapodásokat. Opcióként lehet tekinteni egyfajta leképezése osztályok és fájlútvonalakat azok leírásával, de ez a lehetőség megvan a hátránya, és bizonyos esetekben meglehetősen komplex megvalósítása.

Névterek, PSR-0 és PSR-4

Verziótól kezdődően 5.3 PHP vált egy kicsit közelebb a többi fejlett programozási nyelvek, és ugyanabban az időben, akkor már támogatja a névterek (névterek). Az összefüggésben a probléma mindenekelőtt azt jelenti, hogy minden osztály (felület, szennyeződések), mi is megszerezte a képességét, hogy meghatározza a helyét a teljes hierarchia osztályok.

Tegyük fel, hogy mi osztály MyClass tartozik egy bizonyos csoportja haszonelvű (kiegészítő) osztályokat, azaz a részét alcsoport Utilities. amely viszont tartalmazza a teljes alcsoport MyClasses:

Mint ilyen újítások segíthet megoldani néhány korábban említett problémák?

Vegyük ezt a példát egy osztály MyClass, összefüggésben egy névtelen függvényt rakodó fent leírtak szerint. Kezdjük azzal, hogy a teljes nevét az osztály jelen esetünkben áll a név tér + a nevét az osztály, azaz - .. \ MyClasses \ Utilities \ MyClass. És ez ebben a formában, akkor telt el a Kutch-ve aktuális paraméter függvényében-rakodó. Ez azt jelenti, hogy a régi rendszer változtatás nélkül megkapjuk valójában egy utat, hogy az osztály leírása: /my_classes_folder/MyClasses\Utilities\MySlass.php
És ha vissza minden a visszaperjelek normális ebben a sorban? Kapunk nézni egy tipikus útvonal, amely egy hierarchikus mappák és fájlok MyClass.php végén.

Mi módosítani ill. módon kódunk fkc rakodó:

következtetés:
Mi is helyet alkalmazásunk osztályok acc. mappákat és almappákat, mintha ismétlődő szerkezetet a névtér a mi alkalmazás, ezért egy egyszerű átalakítása a teljes osztály nevét, mi lesz képes fogadni egy részleges vagy teljes elérési utat a leírása az osztály.

Így elérkeztünk egy modernebb megközelítés az indítási osztály előírásokon alapul-PSR-0 / PSR-4. Vegyünk egy egyszerű példát egy osztályt, amely megvalósítja a hasonló szerkezet indítási PSR-0 szabvány.

Az alábbiakban is egy példát a használata a autoloader az alkalmazás kód:

Az alábbiakban egy rövid áttekintést a célja a fenti osztály Autoloader módszerekkel. Az osztály használ a minta „magányos”. miért? Minden alkalommal, amikor létrehoz egy új példányát az osztálynak, rakománya () metódus lesz regisztrálva a betöltője. Nem kell regisztrálni az azonos funkciót betöltő többször, mert olyan közel vannak a lehetőséget.




Kapcsolódó cikkek