Toți utilizatorii de web știu cât de frustrant uneori pentru a deschide pagina și a vedea în loc de articol / blog / imagini mult-așteptata malovrazumitelny un text care spune o eroare de server. Din păcate, realitatea internetului este că este foarte dificil de a face un script care funcționează la fel de bine pe orice platformă și sub orice setări de server.
Prin urmare, este foarte important să puteți identifica corect și să procesați erorile care pot apărea în scenariu. Pentru aceasta, PHP oferă două mecanisme - tratarea erorilor și tratarea excepțiilor.
Din punctul de vedere al dezvoltatorului, principala diferență dintre o eroare și o excepție este că, după ce apare o eroare, scriptul poate continua să execute și, după ce apare o excepție, nu o face.
O altă diferență este că pentru a face față excepțiilor, trebuie să utilizați funcții și construcții de limbi specializate, iar pentru gestionarea erorilor, numai funcții.
Excepții sunt orice situații de urgență care apar atunci când scriptul este executat. În PHP, o excepție poate fi generată ("aruncați", "apelați") și o prindeți. O excepție poate fi generată de interpret și de dezvoltator.
Excepția este numită după cum urmează:
Excepția este capturată folosind constructul de încercare. captura. În general, această construcție este scrisă după cum urmează:
Trebuie remarcat faptul că pot exista multe blocuri de captură, câte una pentru fiecare clasă de excepții interceptate. În acest fel, puteți crea un filtru de excepții. și anume intercepta nu toate, ci numai tipuri selectate de excepții, iar toate celelalte vor fi interceptate de un handler PHP standard.
Puteți crea propria clasă de procesare iskoyucheny, moștenind din clasa excepție. Clasa propriei sale excepție de manipulare - este un dezvoltator de instrument la îndemână, oferind posibilitatea de a conduce jurnalele, afișează un mesaj de eroare, modificați cursul de execuție a script-ul, și multe alte caracteristici.
Întrebarea legitimă este: de ce ar trebui să faceți o greșeală singură? Luați în considerare un exemplu simplu - există o funcție de formare a unui raport privind activitățile companiei. Această funcție conține câteva sute de linii de cod, solicită alte duzini de funcții și citește date din baze de date și fișiere. Acum, imaginați-vă situația când una dintre bazele de date sa oprit brusc și am aflat despre aceasta doar în mijlocul procedurii. Dacă nu există date, atunci nu există nici un sens în formarea unui raport - acesta va fi incomplet și incorect. Dar cum să întrerupeți executarea funcției principale, în timp ce raportați detaliile erorii? Puteți face acest lucru cu mai multe if..else, dar soluția mai simplă este de a utiliza excepții.
În acest exemplu, declarăm doi succesori din clasa Excepție și realizăm generarea de rapoarte. Mai întâi, conectăm toate sursele de date necesare (baze de date, fișiere etc.). Dacă cel puțin o sursă nu este conectată, nu mai puteți continua să lucrați și este necesar să avertizați administratorul despre eroare. Prin urmare, vom arunca o excepție de tip ExceptionMailer. Dacă conexiunea a avut succes, vom continua să lucrăm, să procesăm datele și să generăm un raport bazat pe șablon. Dacă șablonul nu este găsit, generați excepția corespunzătoare.
În exemplul considerat, un rol important îl are ordinea de captură, mai exact ordinea de verificare a tipului de excepție. Dacă ați pus prima dată Excepție, atunci toate celelalte excepții nu vor funcționa niciodată. Captura (Exception $ ex) construiește interceptarea absolut tuturor excepțiilor disponibile.
PHP vă permite să utilizați un handler de excepție. Pentru a face acest lucru, trebuie să vă declarați propria funcție de procesare și să o înregistrați folosind funcția set_exception_handler ().
După aceasta, toate excepțiile care apar nu sunt încadrate de construcția de încercare. cu excepția, va fi trecut la funcția pe care ați declarat-o. De exemplu, puteți schimba funcția pentru a scrie toate excepțiile la fișier și pentru a le oferi utilizatorului un mesaj de eroare "frumos" al serverului în browser:
Uneori această funcție este foarte convenabilă, mai ales atunci când depanarea script-urilor direct pe server. Dacă afișați excepții ca de obicei în browser - acestea vor fi vizibile pentru vizitatori, iar acest lucru nu va adăuga popularitate site-ului dvs. Utilizatorii mult mai puțin dureroși vor percepe un mesaj ca "Ne pare rău, serverul este în întreținere, încercați să vă conectați mai târziu". Prin urmare, toate erorile și excepțiile trebuie să fie scrise în fișiere și este mai bine să le trimiteți administratorului prin e-mail.
Un ton bun la crearea site-urilor este considerat absența completă a erorilor. Dacă apar erori, acestea trebuie prelucrate și prezentate utilizatorului și dezvoltatorului într-o formă ușor de înțeles.