Excepții în php

Excepții în php

În acest articol, vom discuta cu dumneavoastră cele mai frecvente utilizări ale PHP excepție, care vă va ajuta să se ocupe în mod eficient erori în aplicațiile create de tine, și vei înceta în cele din urmă să sufere și să scrie o grămadă de cod inutile pentru a înțelege ce se întâmplă atunci când se produce fiecare eroare.







Care sunt excepțiile?

Excepțiile în PHP sunt condiții speciale care apar, de obicei, atunci când există o eroare în program. Prezența lor indică faptul că în cursul presupuselor evenimente se întâmplă ceva. De regulă, experții preferă să utilizeze instrucțiuni adecvate în astfel de situații, pentru a evita finalizarea necontrolată a procesului.

Cum funcționează excepțiile în practică?

Cu excepția, puteți face două lucruri: aruncați (aruncat) și prindeți (prinși). Dacă excepția este considerată abandonată, atunci aceasta înseamnă doar un lucru: în procesul de lucru al programului dvs. sa întâmplat ceva care a depășit norma. În acest caz, va trebui să utilizați o funcție diferită. Puteți extrage excepții numai într-o funcție specială, care, la rândul său, avertizează întregul program că este gata să proceseze excepția.

  1. Imaginați-vă că browser-ul dvs. este un reliever care aruncă o minge către o capcană.
  2. Jucătorul care lovește mingea încearcă să-l lovească, dar nu pleacă. Ca urmare, el primește o grevă. Dacă jucătorul își îndeplinește sarcina, jucătorul de camp are posibilitatea de a prinde mingea.
  3. Un Fielder prinde mingea, apoi are două opțiuni: arunca-l la un alt jucător de cricket (cu mica distanta de aluat) sau de a aduce Slugger afară din joc de aruncat mingea la el.

Aruncarea capcanei în cazul nostru poate fi comparată cu evoluția normală a procesului. Cu toate acestea, în cazul în care batter este capabil să lovească mingea, atunci se produce excepția.

Când un jucător de pe teren captează o minge, această acțiune este foarte asemănătoare cu executarea unei funcții de tip try-catch care poate face față excepțiilor. Această funcție nu poate numai să efectueze toate acțiunile necesare, ci și să transfere excluderea detectată a unei alte funcții.

Cum să utilizați excepțiile corect?

Dacă doriți să învățați cum să se ocupe de excepție, PHP, atunci ar trebui să înțeleagă un singur lucru: excepțiile sunt considerate parte integrantă a PHP (SPL) standard de bibliotecă, precum și o parte din nucleul PHP, cu condiția ca acestea fac parte din versiunea 5 și de mai sus. Trebuie doar să înțelegeți esența aplicației lor.

Excepțiile pot fi implementate în același mod ca orice alt obiect:

Pe această bază, excepțiile au metode speciale care pot fi numite, dacă este necesar. Acestea din urmă facilitează foarte mult procesul de formare a unei reacții la o excepție specifică. De exemplu, o funcție cum ar fi getMessage () face posibilă obținerea unui mesaj de eroare. Și, la rândul său, poate fi afișat într-un browser sau scris într-o revistă.

Mai jos este o listă de metode de excepție PHP care vă permit să primiți un mesaj de excepție - getMessage ();

  1. Returnați codul numeric reprezentat de excepția - getCode ();
  2. Obțineți fișierul în interiorul căruia a avut loc excepția - getFile ();
  3. Returnați numărul liniei în fișierul în care a apărut excepția - getLine ();
  4. Returnați matricea backtrace () până când apare excepția - getTrace ();
  5. Obțineți excepția care a avut loc înainte de cea curentă, dacă a fost, desigur, - getPrevious ();
  6. Returnați matricea backtrace () a excepției sub forma unui șir - getTraceAsString ();
  7. Returnați toate excepțiile la șir () ca șir. Această funcție poate fi suprascrisă diferit.






Pentru o mai mare claritate a metodelor de mai sus, creați o clasă utilizator, prin care se va efectua gestionarea inițială a înregistrărilor utilizatorilor:

În exemplul de mai sus, există mai multe locuri simultan, în care poate apărea o excepție. La început, $ user_id în funcția _getUserRecord () trebuie să fie de tip integer. Dacă procesul merge în altă direcție, atunci următorul pas este generarea unei excepții:

După aceasta, creați un utilizator cu identificator greșit:

După aceste acțiuni, ar trebui să se primească o notificare de eroare de sistem. Și acum să ne amintim de jucătorul de teren, care este obligat nu numai să captureze excepția, dar și să o proceseze:

În cazul în care putem captura o excepție, putem evita apariția unui mesaj de eroare de sistem generat de PHP în mod implicit.

De asemenea, rețineți că excepția care este aruncată poate fi oprită numai când funcția de încercare de mai sus a fost capabilă să o captureze. În caz contrar, browserul va afișa o eroare. Să încercăm să ne dăm seama exact unde a fost aruncat excepția în exemplul dat de noi.

  1. Un nou obiect utilizator este creat pe linia $ user2 = utilizator nou ("nu este numeric");
  2. Se execută funcția __construct () a clasei User;
  3. Se efectuează o tranziție la funcția _getUserRecord () a clasei User;
  4. $ User_id este verificat de funcția _validateUserId;
  5. În cazul în care $ user_id nu este recunoscut ca valoare numerică, obiectul excepție este aruncat.

În plus, puteți executa funcția getTraceAsString () pentru a urmări și alte excepții:

Dacă excepția a apărut mai adânc decât a apela $ user2 = new User ('nu numeric'), apare în partea de sus până când blocul try-catch nu o face.

Acum vom încerca să formăm o excepție pentru cod. Corelarea codului numeric cu o excepție este o mișcare excelentă pentru a ascunde eroarea care a avut loc de la client. Implicit, codul de excepție este zero.

Cu toate acestea, acest lucru poate fi modificat și în momentul excepției:

Trebuie să creați o clasă UserErrors:

Astfel, procedura de tratare a excepțiilor este modificată pentru a scoate codul de excepție, care va apărea în loc de mesaj.

De asemenea, merită aplicate alte metode de excludere pentru urmărire. De exemplu, puteți crea o clasă Logger:

După aceasta, efectuăm o modificare a manipulării excepțiilor, astfel încât să putem aplica clasa Logger:

Acum ne-am asigurat că se emite un cod de excepție în timpul executării programului. În fișierul exceptions_log.html, puteți vedea toate informațiile asociate cu locația excepției.

Așa cum am înțeles deja mai devreme, excepțiile sunt un instrument important implicat în procesarea erorilor de program. Cu toate acestea, excepțiile extinse permit programatorului să ajungă la un nivel complet diferit.

Pentru a crea acest tip de excepție, mai întâi trebuie să construiți o clasă de excepții care poate extinde clasa Excepție.

După aceasta, creați o excepție definită de utilizator numită UserException pentru clasa mai sus menționată, pe care am construit-o deja puțin mai sus:

Ca rezultat, am rewrite funcția __construct, care este responsabilă pentru implementarea constructorului. Deoarece clasa pe care am creat-o extinde clasa de Excepție, în acest caz este bine să folosim constructorul său cu directiva parentală.

Astfel, ne eliminăm din generarea constantă de mesaje de eroare, folosindu-ne în lucrarea noastră doar codul de excepție. De asemenea, puteți omite funcția de înregistrare, deoarece același lucru este furnizat în constructorul utilizatorului.

Actualizați acum codul care se aplică noii clase UserException:

De asemenea, facem modificări în codul în care pot apărea excepții. Pentru aceasta, selectați Utilizator de clasă.

Acum încercăm să generăm trei excepții:

Care sunt avantajele utilizării excepției extinse?

În primul rând, putem crea un constructor personalizat.

În al doilea rând, cu excepția tipului extins, putem rescrie funcția __construct și execută propriul cod.

În al treilea rând, este posibilă organizarea unei excepții în funcție de tipul specific de obiect. Ei bine, și în al patrulea rând, putem aplica un bloc de intercepții multiple în timp ce procesăm excepțiile care apar, în funcție de tipul lor.

Cum se utilizează blocul de intercepții multiple?

Cu acest bloc, este mult mai ușor să se rezolve excepțiile anumitor tipuri. O tehnică similară poate fi aplicată dacă aveți mai multe excepții de diferite tipuri.

De exemplu, blocul de încercare-captare este capabil să se ocupe doar de excepția tipului obișnuit. Și această tehnică este mai mult destinată cazurilor neplanificate.

Acum vom încerca să schimbăm codul existent în așa fel încât excepția UserException să fie procesată într-un mod special. Pentru a face acest lucru, trebuie să aplicați o altă unitate de interceptare și apoi toate excepțiile neașteptate vor fi procesate cu succes.

Excepțiile de mai sus (UserException și Excepție) pot fi tratate în diverse moduri și este posibil ca unii dintre voi să pară că nu există nici o utilizare în procesarea lor separată. Cu toate acestea, veți putea afișa sau scrie în jurnal numai cu excepții speciale.

În general, excepțiile, PHP, efectuează o procesare centralizată și simplă a diferitelor erori în timpul executării codului de program.

--------- pe materiale net.tutsplus.com ---------







Articole similare

Trimiteți-le prietenilor: