Minden, ami a startup php

PHP-használó programozók OOP, gyakran kell szervezni osztályokat meghatározni mindegyik egy külön fájlban. Ebben az esetben a programozó gyakran szembesülnek meglehetősen fárasztó feladat: kapcsolat által használt osztályok, amelyek használják a projektben. A folyamat automatikussá, a PHP 5.0 nyújtott lehetőséget indítási osztályok.

Mivel a függvény __autoload () bevezetésre került változata PHP 5.0. Olyan eljárás működtető ez nagyon egyszerű: amikor a script kód fut át ​​az ismeretlen neki az osztály, ez okozza __autoload () függvényt. feltéve, hogy megállapítást nyert, és átadja azt a neve ismeretlen osztály abban a reményben, hogy ez a funkció csatlakozik fájl osztály definíciója. Így __autoload function () jeleznie kell, milyen módon kell majd keresni osztályok kapcsolatot.

Tegyük fel, hogy van egy pár design osztályok az osztályok mappában. Nevük és tartalma a következő:

A fej script, meg kell szervezni azokat automatikusan letölti. Ebből a célból, kijelentjük fej script indítás funkcióval, amely megkeresi a plug-in osztályok osztályok mappában. Akkor tudod használni ezeket az osztályokat:

Ennek eredményeként az oldalon, azt látjuk, a következő kép:

Mint látható, már bejelentette, hogy számos osztályok külön fájlokban, és a fő script, nincs hívás include / igényel nyilatkozatokat. Sőt, az automatikus betöltését megtörténik, ha szükséges.

Azonban ez a megközelítés a problémát tárt fel egy nagy hátránya: néha meg kell határoznia több funkció indításra, __autoload () függvény szükséges kerítés némi logika ötvözi ezeket a funkciókat, ami elég kellemetlen. Hamarosan találták jobb mechanizmus indítási osztályok.

Az indítási az SPL könyvtár

Kezdve verzió PHP 5.1.2 új osztályát rendszer indításakor került bevezetésre, amely bekerült a könyvtárban SPL (standard PHP Library). A fő különbség az új indítási rendszer, amit tetszőleges számú indítási funkciók. Mindegyikük egy köteget hozzunk létre indítási funkció, amelyben az egymást követő indítási hozzáadott funkció kerül a végén a verem. Így, amikor a forgatókönyvet, amikor találkozik egy ismeretlen az osztályban, ő felváltva hívásokat indítási funkció a verem, amíg a amíg a kívánt osztály van betöltve.

Tehát az új indítási rendszer tartalmaz több mint 6 Üzembe menedzsment funkciók:

  • spl_autoload_call - kényszeríti az osztály nevét, az összes rendelkezésre álló autoloaders rendszer
  • spl_autoload_extensions - visszatér / módosítja a fájl kiterjesztését, amelynek van egy rakodási inicializált osztályokba;
  • spl_autoload_functions - ad egy listát az összes regisztrált autoloaders a rendszerben;
  • spl_autoload_register - regisztrációs önálló autoloader verem indítás;
  • spl_autoload_unregister - eltávolítjuk a autoloader indulásnál a köteg;
  • spl_autoload - a fő funkciója az automatikus betöltését osztályok. Úgy hívják, hivatkozva egy osztály, amely nem inicializált. Ez a funkció aktiválja az összes automatikus etetők a köteg a sorrendben vannak hozzá.

Annak érdekében, hogy az eljárás az alapértelmezett indítási, akkor csak hívás spl_autoload_register () függvény paraméterek nélkül. Ezután úton aktiválja indítási osztályok, amelyek automatikusan hívja spl_autoload () függvény, amikor megpróbál létrehozni egy programot ismeretlen fokon. Paraméterként ezt a funkciót vezetünk a nevét egy ismeretlen osztály, amelyet ezt követően alakítjuk a fájl nevét. A mechanizmus a következő: osztály nevét kisbetűvel, és vele az összes szabványos kiterjesztéseket adunk egymásutánban (első .inc, majd .php), majd keressük meg a fájlt ugyanabban a könyvtárban, ahol a script található, és megállapította, hogy, próbálja meg letölteni a tartalmat ezt a fájlt, feltételezve, hogy ez a meghatározás egy ismeretlen osztályban. Szintén a végrehajtása indítási osztályok által támogatott alapértelmezett névteret, és a csomag neve van rendelve egy könyvtár nevét. Mégis, alapértelmezés szerint túl sok korlátozást az indításkor. Ezért szinte mindig, a fejlesztők megírják indítási funkció, és add hozzá a verem.

Tegyük fel, hogy két különböző (classes könyvtárba és lib) könyvtár, amely tárolja az olyan tantárgyakat, és az osztályok az indítási minden könyvtár szeretnénk saját induló funkció (példaként).

Ennek eredményeként megkapjuk az oldalt:

végrehajtó __aturoload () a aClassName = MyClass1

végrehajtott MyClass1 :: __ construct () módszer

végrehajtó __aturoload () a aClassName = MyClass3

végrehajtott MyClass3 :: __ construct () módszer

Fatal error: Class 'MyClass2' nem található a Z: \ home \ test.loc \ www \ index.php on line 44

A példában láthatjuk, hogy a regisztrált szkript két indítási funkció, ami okozta. Aztán egy funkciót, és próbált hivatkozni, hogy lekerült az indulás vagy a verem, és ennek következtében - a script nem működik.

Az átmenet a funkció __autoload () használatára vonatkozó SPL-indítási

A nyelv PHP függvény __autoload () elavult, így a jövőben a PHP verziók támogatják ezt a funkciót nem lehet garantálni. Ha ezt a funkciót a projekt kapcsolódik egy másik probléma - kikapcsolja a használatát SPL-indításkor. Ahhoz, hogy ne essen a helyzet, amikor azt tapasztalja, hogy __autoload () függvény nem hívják PHP-értelmező, vagy abban az esetben, hogy támogatni kell SPL-startup, egyszerűen hívja spl_autoload_register () függvény argumentumában string „__autoload”, az alábbiak szerint:

A mechanizmus automatikusan betölti osztályok - ez egy másik erősen követelte eszköz az Arsenal PHP-fejlesztő. Az E mechanizmus alkalmazása mindenütt megtalálható: függetlenül attól, hogy a kód egy kis projekt, vagy egy újkeletű keretet.
Mechanizmusának megértéséhez indítási osztályok php jelentős előnyöket kínál a mester a szoftver gyártójával. Nagyjából, a feladat végrehajtása indítási funkciók - automatizálni működésének általános hívás igényelnek / utasításokat tartalmaz. Természetesen azt is tudjuk, ezek árnyalatait adja mélyebb ismereteket a munka PHP-scriptek ismerete, php-keretek fogják polee gyengéden, stb

PHP-fejlesztői közösség már régóta aggasztja a szabványosítás, hogyan lehet a legjobban megszervezni az indítási mechanizmus, amely által használt összes többi érdekelt fél. Üldözött meglehetősen banális cél: csatlakozni a harmadik fél osztály vagy keret gyorsan meg tudja valósítani azt az indítási és kezdi el használni a lehető leghamarabb. A jelenlegi specifikáció leírja indítási áram szabvány hívják PSR-4. A fordítás itt elérhető.

Kapcsolódó cikkek