indítási mechanizmus osztályok php
Ebben a cikkben azt szeretném mondani, hogy hogyan állnak a dolgok az öntöltő osztályok PHP, valamint a közös megközelítés végrehajtásában indításkor.
A régi PHP kód bevett gyakorlat volt, hogy a szükség, require_once, többek között, include_once állományok betöltésére, amelyek tartalmazzák a szükséges osztályok, például:
Ilyen require_once elején fájlok felhalmozott hatalmas összeg.
Ez rossz? Igen.
Miért? mert:
- betöltött fájlok minden esetben, még ha ez nem szükséges,
- Folyamatosan kellett írni igényelnek / include és könnyen elfelejteni csatlakozni bármilyen fájlt
- abban az esetben, mozgása egy fájlt, meg kellett változtatni az összes kapcsolódó követeli
Azok a napok hosszú elment, mert PHP 5 jött autoloading mechanizmusa és funkciója __autoload (), amely az úgynevezett minden alkalommal létrehoz egy objektumot ismeretlen osztályban. Az egyetlen dolog, ami megmaradt a fejlesztő, így hajtják végre, és már nem volt szükség, hogy írjon, és megkívánják:
mert Ez korábban nem csatlakozik sehova fájlt, amely tartalmazza a felhasználói osztály, akkor a függvény __autoload () nevezzük, amelyet az adott osztályban nevét, mint paramétert $ class, és ő viszont megpróbál csatlakozni egy fájl, amely ebben az osztályban.
Ez a funkció lehetővé teszi, hogy rögzítse minden olyan funkciót hivatkozott rá, mint egy végrehajtási mechanizmus indítási osztályok. Ha hívjuk paraméterek nélkül, a funkció spl_autoload () fog működni, mint a végrehajtási indítás
Ez a mechanizmus egy kör, így rekord egynél több funkciót megoldani indítási problémák osztályok. Minden funkció kerül meghívásra a sorrendben a regisztráció. Szintén verzió 5.3 már támogatja a névterek.
+ kényelmes mechanizmust indítási osztály befejezte az alapértelmezett végrehajtása
+ fájlok betöltése csak szükség esetén
+ nem kell írni egy csomó igényel
Kiviteli alakjai az indítási osztály
Azt javaslom, hogy megismerjék a közös megközelítés végrehajtásában autoloaders és írhatunk.
Manuális regisztráció osztályok öntöltő
Ez a módszer létrehozásának egyetlen autoloader, a regisztráció osztályok ott. Ez akkor fordulhat elő az alábbiak szerint:
Ezután meg kell regisztrálni a autoloader:
Folytassuk azonnali használatra. Például, van két osztály Felhasználó és a Task, amelyek rendre /src/Model/User.php és /src/Model/Task.php, majd kapcsolja be a startup, tennünk kell a következőket:
akkor olyan helyeken, ahol létre kell hoznunk tárgyak ezekben az osztályokban, egyszerűen írd be:
és munkamódszer mi autoload betöltője.
Ez a módszer nem tökéletes, és megvannak a maga előnyei:
+ helyett igényel állandó elég egyszer regisztrálni egy osztály Jukebox
+ A fájlok betöltése csak szükség van rájuk
+ abban az esetben a fájl helyét változások, elég megváltoztatni az utat egy helyen
+ lehetővé teszi hozzá a harmadik fél könyvtárak a projekt, akkor kell csak hozzá az osztályokat avtoloadera térképen
- manuálisan kell regisztrálni az osztályok
- Ez nem teszi lehetővé az osztály nevét gyorsan meghatározni, hogy hol található
Osztály neveket mutató fájl elérési útját
Ezt a módszert alkalmazzák az indítási osztályok sablonozó Twig, és ezt használtuk az első változata Zend Framework'e. Ennek lényege, hogy a neve az osztály jelöli azt a mappát, ahová a fájlt tartalmazó ebben az osztályban. Ez könnyen érthető itt egy példa:
Alapján ez a példa jól írsz egy függvényt az indítási osztály, a következő egy ilyen megállapodás:
Minden munkája csökken egyetlen intézkedés - helyett aláhúzás az osztály nevét perjel, így egy elérési utat. Ebben a példában mereven meghatározott gyökér benchmark elején az utat, hogy a fájlrendszer, a javulás ezen a ponton, bízom az olvasó lelkiismerete.
Tekintsük az előnyei és hátrányai a betöltője.
+ Nem kell kézzel regisztrálni az osztályok
+ fájlokat tartalmazza csak szükség esetén
+ A fájlnév könnyű meghatározni, hogy hol van
+ Ez kizárja a konfliktusok az osztály nevét, mint Nem lehet két fájl azonos név a fájlrendszerben
- Nincs indítási korrepetálásának amelyeket nem követi ezeket a feltételeket elnevezésére osztályokat, azaz nem támogatja a névterek
- abban az esetben, súlyos szerkezetátalakítási a mappa struktúrát kell átírni az összes osztály nevét
Startup osztályok névterekkel
Bevezetése óta a névterek PHP, ez a módszer vált az egyik legnépszerűbb. A lényeg az, hogy a névterek kell kapcsolni egy adott mappát a fájlrendszerben, és az összes almappa / fájlok automatikusan vesszük fel. Az alábbiakban egy egyszerűsített példa a autoloader támogatja névterek:
Ezután úgy példáját az ezzel autoloader:
Ebben a példában adtunk névterek modell, amely rámutat, hogy az src / Model mappába. Továbbá, ha létrehozunk egy objektum osztály Alias \ Robot, a autoloader vesz egy húr Model \ Robot. Részeként Modell útvonal képződik src / típus, és a robot - Robot.php, a végső utat a robot osztály kapott src / Modell / Robot.php.
Mi az előnye és hátránya ennek a megközelítésnek?
+ támogatás névterek, amelyeket a sok modern könyvtárak
+ egyszerűsített törzskönyvezési névterek képest a regisztrációs osztályok az első autoloader
+ nincs ütközés az osztályban nevek, mint Minden fájl él névterek
- regisztrálnia kell névterek
P.s. A forráskód a cikk autoloaders, valamint példákat azok használatáról itt látható.