PHP-programatori folosind OOP, de multe ori necesitatea de a organiza cursuri pentru a defini fiecare dintre ele într-un fișier separat. În acest caz, programatorul se confruntă adesea cu o sarcină destul de plictisitoare: conexiune folosită de clase care sunt utilizate în cadrul proiectului. Pentru a automatiza acest proces, în PHP 5.0 a oferit oportunitatea pentru clasele de pornire.
Deoarece __autoload funcția () a fost introdus cu versiunea PHP 5.0. O metodă de operare este destul de simplu: atunci când codul de script-ul ruleaza peste necunoscut pentru el clasa, provoacă funcția __autoload (). cu condiția ca aceasta a fost determinată, și trece-l pe numele unei clase necunoscute, în speranța că această funcție va conecta fișier cu definiția clasei. Astfel, __autoload funcția () ar trebui să indice ce fel va fi necesară pentru a căuta pentru conectarea clase.
Să presupunem că avem câteva clase de proiectare în dosarul clase. Numele și conținutul lor sunt după cum urmează:
La script-ul cap, avem nevoie pentru a le organiza în mod automat descărcarea. În acest scop, vom declara o funcție de pornire script cap care caută dosar clase de clase de plug-in. Apoi, puteți utiliza aceste clase:
Ca urmare, pe pagina, vom vedea imaginea de mai jos:
După cum puteți vedea, am anunțat un număr de clase în fișiere separate, și în script-ul principal, nici un apel nu includ / necesită declarații. Mai mult decât atât, auto-încărcare de clase are loc după cum este necesar.
Cu toate acestea, această abordare a problemei a scos la iveală un dezavantaj major: uneori este necesar pentru a defini mai multe funcții de pornire, și apoi __autoload () funcție este necesară o anumită logică gard de a combina aceste funcții, ceea ce este destul de incomod. Curând a fost inventat mai bine mecanism clase de pornire.
Utilizarea de pornire a bibliotecii SPL
Pornind de la versiunea PHP 5.1.2 un nou sistem de pornire de clasă a fost introdus, care a fost inclus în SPL de bibliotecă (Standard PHP Library). Principala diferență dintre noul sistem de pornire este că puteți defini orice număr de funcții de pornire. Toate acestea formează o stivă de pornire funcții în care fiecare funcție succesivă de pornire a adăugat ajunge la capătul teancului. Astfel, atunci când script-ul atunci când întâlnește un necunoscut clasa lui, el numește alternativ toate funcțiile de pornire pe stivă până când până când este încărcat clasa necesară.
Deci, noul sistem de pornire include cât mai multe 6 funcții de conducere de pornire:
- spl_autoload_call - forțează clasa după nume, folosind toate sistem autoloaders disponibile;
- spl_autoload_extensions - se întoarce / modifică extensia de fișier, din care există o încărcare neinitializate clase;
- spl_autoload_functions - returnează o listă a tuturor autoloaders înregistrate în sistem;
- spl_autoload_register - înregistrarea de auto-Autoloader stiva de pornire;
- spl_autoload_unregister - eliminarea autoincarcatorul de pornire a stivei;
- spl_autoload - funcția principală de încărcare automată a claselor. Este numit prin referire la o clasă care nu a fost inițializat. Această funcție activează toate alimentatoare automate ale stivei în ordinea în care sunt adăugate.
Pentru a activa metoda de pornire implicit, aveți nevoie doar de spl_autoload_register apel () funcția fără nici un parametru. După aceea înseamnă activează clase de pornire, care apelează automat funcția spl_autoload () atunci când încercați să creați un program de instanță necunoscut. Ca un parametru al acestei funcții este trecut numele unei clase necunoscute, care a fost transformată ulterior în numele fișierului. Mecanismul este după cum urmează: nume de clasă la litere mici, și să-l toate extensiile standard sunt adăugate succesiv (prima .inc, apoi .php), apoi căutați fișierul în același director în care se află script-ul, și găsind-o, încercați să descărcați conținutul acest fișier, presupunând că aceasta este definiția unei clase necunoscute. De asemenea, în punerea în aplicare a claselor de pornire sunt susținute de spațiul de nume implicit, și numele pachetului este atribuit un nume de director. Cu toate acestea, în mod implicit prea multe restricții în pornire. Prin urmare, aproape întotdeauna, dezvoltatorii scrie funcțiile lor de pornire și să le adăugați în stivă.
Să presupunem că avem două clase diferite (directoare și lib) directoare, care stochează unele clase, și clase de pornire a fiecărui director dorim să ne asigurăm propria funcție de pornire (cu titlu de exemplu).
Ca rezultat, obținem pagina:
executarea __aturoload () cu aClassName = MyClass1
executat MyClass1 :: __ construct) Metoda (
executarea __aturoload () cu aClassName = MyClass3
executat MyClass3 :: __ construct) Metoda (
Eroare fatală: Clasa 'MyClass2' nu a fost găsit în Z: Casa \ test.loc \ www \ index.php \ on line 44
De exemplu, putem vedea că în script-ul a înregistrat două funcții de pornire, care la rândul lor au fost cauzate. Apoi, o funcție, și a încercat să invoce aceasta a fost eliminată din demarajului stivei, și ca o consecință - script-ul nu reușește.
Trecerea de la funcția __autoload () cu privire la utilizarea SPL pornire
__autoload Funcția limbaj PHP () este depășită, astfel încât în versiunile viitoare PHP suportă această funcție nu poate fi garantată. Folosind această facilitate într-un proiect legat de o altă problemă - se oprește utilizarea SPL-pornire. Pentru a evita care se încadrează într-o situație în care constată că funcția __autoload () nu este numit PHP-interpret, sau în caz de necesitatea de a sprijini SPL-pornire, puteți apela pur și simplu spl_autoload_register () funcția cu ca șirul argument „__autoload“, după cum se arată mai jos:
Mecanismul încărca automat clase - acesta este un alt instrument foarte solicitat în arsenalul de PHP-Developer. Utilizarea acestui mecanism este găsit peste tot: dacă acesta este codul unui proiect mic sau un cadru de modă nouă.
Intelegerea mecanismului de clase de pornire în PHP oferă avantaje semnificative de a stăpâni producătorul de software. În general, sarcina de punere în aplicare a funcțiilor de pornire - pentru a automatiza funcționarea apelurilor universale necesită / include instrucțiuni. Desigur, de asemenea, știind aceste nuanțe oferă o cunoaștere mai profundă cu privire la activitatea PHP-script-uri, familiarizare cu php-cadre vor fi polee ușor, etc.
comunitatea PHP-dezvoltator a fost mult timp de standardizare preocupat de modalitatea optimă de organizare a mecanismului de pornire care va fi utilizat de către toate celelalte părți interesate. Persecutat obiectiv destul de banal: pentru a se conecta cu clasa de terță parte sau de cadru se poate implementa rapid de pornire și începe să utilizați cât mai curând posibil. Specificația de curent care descrie standardul curent de pornire este numit PSR-4. traducerea sa este disponibil aici.