Ce este o excepție?
O eroare este un rezultat neașteptat al programului, care nu poate fi gestionat de programul însuși.
Erorile sunt rezolvate prin remedierea programului. Un exemplu de eroare ar fi o buclă infinită care nu încetează niciodată să se execute.
O excepție este rezultatul neașteptat al programului, care poate fi gestionat chiar de program.
Exemple de excepție includ încercarea de a deschide un fișier care nu există.
Această excepție poate fi gestionată fie prin crearea fișierului, fie prin prezentarea utilizatorului cu opțiunea de a căuta fișierul.
În acest tutorial, veți învăța-
- De ce să gestionăm excepția?
- Manipularea erorilor PHP
- Eroare la tratarea exemplelor
- Diferența dintre erori și excepție
- Excepții multiple
- Testarea codului
De ce să gestionăm excepția?
- Evitați rezultatele neașteptate pe paginile noastre, care pot fi foarte enervante sau iritante pentru utilizatorii noștri finali
- Îmbunătățiți securitatea aplicațiilor noastre, nespunând informații pe care utilizatorii rău intenționați le pot folosi pentru a ataca aplicațiile noastre
- Excepțiile PHP sunt folosite pentru a schimba fluxul normal al unui program dacă apare o eroare previzibilă.
Manipularea erorilor PHP
Când apare o eroare, în funcție de setările de configurare, PHP afișează mesajul de eroare în browserul web cu informații referitoare la eroarea care a apărut.
PHP oferă o serie de modalități de gestionare a erorilor.
Vom analiza trei (3) metode frecvent utilizate;
- Instrucțiuni Die - funcția die combină funcția ecou și ieșire într-una singură. Este foarte util atunci când vrem să scoatem un mesaj și să oprim execuția scriptului atunci când apare o eroare.
- Handlers personalizate de erori - acestea sunt funcții definite de utilizator care sunt apelate ori de câte ori apare o eroare.
- Raportarea erorilor PHP - mesajul de eroare în funcție de setările de raportare a erorilor PHP. Această metodă este foarte utilă în mediul de dezvoltare atunci când nu aveți idee ce a cauzat eroarea. Informațiile afișate vă pot ajuta să depanați aplicația.
Eroare la tratarea exemplelor
Să vedem acum câteva exemple simple cu rutine de tratare a erorilor.
Să presupunem că am dezvoltat o aplicație care utilizează fișiere text pentru a stoca date. S-ar putea să dorim să verificăm existența fișierului înainte de a încerca să citim date din acesta.
Codul de mai jos implementează exemplul de mai sus.
Presupunând că ați salvat fișierul simple_error.php în dosarul phptuts, deschideți adresa URL http: //localhost/phptuts/simple_error.php
Veți obține următoarele rezultate
După cum puteți vedea din rezultatele de mai sus, aplicația noastră arată neprofesionistă și poate fi enervantă pentru utilizator.
Vom modifica codul de mai sus și vom scrie un instrument de gestionare a erorilor pentru aplicație
Presupunând că ați salvat codul de mai sus ca error_handling.php, deschideți adresa URL http: //localhost/phptuts/error_handling.php
Notă: este o practică bună de securitate să afișați un mesaj ca cel afișat mai sus în loc să afișați mesajul ca „Fișierul nu a fost găsit”.
Să vedem un alt exemplu care utilizează un handler de eroare personalizat.
Gestionarul de erori personalizat va fi setat ca funcție implicită de gestionare a erorilor PHP și va afișa practic un număr de eroare și un mesaj.
Codul de mai jos ilustrează implementarea exemplului de mai sus
Deschideți adresa URL http: //localhost/phptuts/custom_error_handler.php veți obține următoarele rezultate
.
După cum puteți vedea din exemplul de mai sus, gestionarele de erori personalizate sunt puternice în sensul că
- Acestea ne permit să personalizăm mesajele de eroare.
- Gestionarul de erori personalizat poate include, de asemenea, înregistrarea erorilor într-un fișier / bază de date, trimiterea unui e-mail dezvoltatorului etc.
Să vedem acum al treilea tip de gestionare a erorilor. Vom folosi funcția PHP integrată funcția error_reporting. Are următoarea sintaxă de bază
AICI,
- „Error_reporting” este funcția de raportare a erorilor PHP
- „$ Reporting_level" este opțional, poate fi utilizat pentru a seta nivelul de raportare. Dacă nu a fost specificat niciun nivel de raportare, PHP va utiliza nivelul implicit de raportare a erorilor, așa cum este specificat în fișierul php.ini.
Nivel de raportare | Descriere | Exemplu |
---|---|---|
E_AVERTIZARE | Afișează numai mesajele de avertizare. Nu oprește executarea scriptului | error_reporting (E_WARNING); |
E_NOTICE | Afișează notificări care pot apărea în timpul executării normale a unui program sau care ar putea fi o eroare. | error_reporting (E_ NOTICE); |
E_USER_ERROR | Afișează erorile generate de utilizator, adică gestionarea erorilor personalizate | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Afișează mesajele de avertizare generate de utilizator | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Afișează notificările generate de utilizator | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Afișează erori care nu sunt fatale și care pot fi tratate folosind handlerele de erori personalizate | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Afișează toate erorile și avertismentele | raportare_eroare (E_ ALL); |
Diferența dintre erori și excepție
- Excepțiile sunt aruncate și intenționate să fie surprinse, în timp ce erorile sunt în general irecuperabile.
-
Excepțiile sunt tratate într-un mod orientat obiect.
Aceasta înseamnă când se aruncă o excepție; se creează un obiect de excepție care conține detaliile excepției.
Tabelul de mai jos prezintă metodele obiectului de excepție
Metodă | Descriere | Exemplu |
---|---|---|
getMessage () | Afișează mesajul excepției |
getMessage();?> |
obțineți codul() | Afișează codul numeric care reprezintă excepția |
getCode();?> |
ia fisierul() | Afișează numele fișierului și calea unde a avut loc excepția |
getFile();?> |
getLine () | Afișează numărul liniei unde a avut loc excepția |
getLine();?> |
getTrace () | Afișează o matrice de backtrace înainte de excepție |
getTrace());?> |
getPrevious () | Afișează excepția anterioară înainte de cea curentă |
getPrevious();?> |
getTraceAsString () | Afișează backtrace-ul excepției ca șir în loc de matrice |
getTraceAsString();?> |
__toString () | Afișează întreaga excepție ca un șir |
__toString();?> |
Mai jos este sintaxa de bază pentru aruncarea unei excepții.
AICI,
- „Arunca” este cuvântul cheie folosit pentru a arunca excepția
- „New Exception (…)” creează un obiect de excepție și trece „Acesta este un exemplu de excepție” șir ca parametru de mesaj.
Codul de mai sus afișează următorul mesaj.
Vom analiza acum un exemplu care implementează excepțiile de aruncare și captură.
Vom modifica exemplul de mai sus și vom include try, throw și catch.
Are următoarea sintaxă de bază.
AICI,
- „Încercați {...}” este blocul de cod care trebuie executat și care ar putea genera o excepție
- „Catch (Exception $ e) {…}” este blocul de cod care prinde excepția aruncată și atribuie obiectul de excepție variabilei $ e.
Codul de mai jos prezintă exemplul de excepție de bază cu excepția try, throw și catch implementată.
Programul aruncă în mod deliberat o excepție pe care o prinde apoi.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Deschideți adresa URL http: //localhost/phptuts/exception_handling.php Veți obține următoarele rezultate.
De asemenea, este posibil să creați mai multe excepții pentru o instrucțiune php try în funcție de tipul de excepție aruncat.
Vezi articolul despre MySQL, acces la date PHP
… Pentru exemple de implementare a mai multor excepțiiExcepții multiple
Excepția multiplă folosește mai multe blocuri try catch pentru a gestiona excepțiile aruncate. Excepții multiple sunt utile atunci când;
- Doriți să afișați un mesaj personalizat în funcție de excepția aruncată
- Doriți să efectuați o operație unică în funcție de excepția aruncată
Diagrama de mai jos ilustrează modul în care funcționează mai multe excepții
Să vedem un exemplu care folosește mai multe excepții.
Vom modifica codul care împarte un număr la numitorul trecut.
Ne așteptăm să apară două tipuri de excepții;
- Impartirea cu zero
- Împărțirea cu un număr negativ
Pentru simplitate, vom afișa tipul de excepție numai în blocurile noastre de captură.
PHP construit în clasa Exception este folosit pentru a arunca excepții.
Vom crea două clase care extind clasa de excepție și le vom folosi pentru a arunca excepții.
Codul de mai jos arată implementarea.
Testarea codului
Vom presupune că ați salvat multiple_exceptions.php în dosarul phptuts.
Navigați la adresa URL http: //localhost/phptuts/multiple_exceptions.php
Reveniți la fișierul PHP și treceți -1 ca parametru așa cum se arată în următoarea diagramă.
Navigați la adresa URL http: //localhost/phptuts/multiple_exceptions.php .
Ce rezultate obțineți? Treceți 3 ca parametru.
Ce rezultate obțineți?
rezumat
- Erorile sunt rezultate neașteptate produse de codul PHP
- Tratarea erorilor îmbunătățește performanța aplicației
- PHP a încorporat funcții care pot fi utilizate pentru a personaliza modul în care PHP raportează erori
- Excepțiile sunt ca erorile, dar pot fi surprinse folosind blocul de captură atunci când sunt aruncate.
- Afișarea mesajelor de eroare care afișează informații despre erori este considerată o practică de securitate proastă.