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ó.

Kapcsolódó cikkek