Exemplu PHP Try Catch: Excepție & Tutorial de gestionare a erorilor

Cuprins:

Anonim

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;

  1. 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.
  2. Handlers personalizate de erori - acestea sunt funcții definite de utilizator care sunt apelate ori de câte ori apare o eroare.
  3. 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ții

Excepț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ă.