Kaj je izjema?
Napaka je nepričakovan rezultat programa, ki ga sam program ne more obravnavati.
Napake odpravimo s popravljanjem programa. Primer napake bi bila neskončna zanka, ki se ne preneha izvajati.
Izjema so nepričakovani rezultati programa, ki jih lahko obravnava sam program.
Primeri izjem vključujejo poskus odpiranja datoteke, ki ne obstaja.
To izjemo je mogoče rešiti tako, da ustvarite datoteko ali pa uporabniku predstavite možnost iskanja datoteke.
V tej vadnici boste izvedeli-
- Zakaj ravnati z izjemo?
- Obravnavanje napak PHP
- Napaka pri ravnanju s primeri
- Razlika med napakami in izjemami
- Več izjem
- Testiranje kode
Zakaj ravnati z izjemo?
- Izogibajte se nepričakovanim rezultatom na naših straneh, ki so lahko zelo moteči ali dražljivi za naše končne uporabnike
- Izboljšajte varnost naših aplikacij, tako da ne razkrivate informacij, ki jih zlonamerni uporabniki lahko uporabljajo za napad na naše aplikacije
- Izjeme Php se uporabljajo za spreminjanje običajnega poteka programa, če pride do kakršne koli predvidljive napake.
Obravnavanje napak PHP
Ko pride do napake, PHP v spletnem brskalniku prikaže sporočilo o napaki z informacijami o napaki, ki se je zgodila.
PHP ponuja številne načine za obvladovanje napak.
Ogledali si bomo tri (3) pogosto uporabljene metode;
- Izjave o die - funkcija die združuje funkcijo odmeva in izhoda v enem. Zelo koristno je, če želimo izpisati sporočilo in ustaviti izvajanje skripta, ko pride do napake.
- Obdelovalci napak po meri - to so uporabniško določene funkcije, ki se prikličejo vsakič, ko pride do napake.
- Poročanje o napakah PHP - sporočilo o napaki, odvisno od nastavitev poročanja o napakah PHP. Ta metoda je zelo uporabna v razvojnem okolju, če sploh ne veste, kaj je povzročilo napako. Prikazane informacije vam lahko pomagajo pri odpravljanju napak v aplikaciji.
Napaka pri ravnanju s primeri
Oglejmo si zdaj nekaj preprostih primerov z rutinami za ravnanje z napakami.
Predpostavimo, da smo razvili aplikacijo, ki za shranjevanje podatkov uporablja besedilne datoteke. Morda bomo želeli preveriti obstoj datoteke, preden poskusimo prebrati podatke iz nje.
Spodnja koda izvaja zgornji primer.
Ob predpostavki, da ste datoteko simple_error.php shranili v mapo phptuts, odprite URL http: //localhost/phptuts/simple_error.php
Dobili boste naslednje rezultate
Kot lahko vidite iz zgornjih rezultatov, je naša aplikacija videti neprofesionalno in je uporabniku lahko moteča.
Spremenili bomo zgornjo kodo in za aplikacijo napisali obdelavo napak
Ob predpostavki, da ste zgornjo kodo shranili kot error_handling.php, odprite URL http: //localhost/phptuts/error_handling.php
Opomba: dobra varnostna praksa je, da se sporočilo prikaže kot zgoraj prikazano, namesto da se prikaže sporočilo, kot je »Datoteke ni mogoče najti«.
Oglejmo si še en primer, ki uporablja orodje za obdelavo napak po meri.
Upravitelj napak po meri bo nastavljen kot privzeta funkcija obdelave napak PHP in bo v bistvu prikazal številko napake in sporočilo.
Spodnja koda prikazuje izvajanje zgornjega primera
Odprite URL http: //localhost/phptuts/custom_error_handler.php , dobili boste naslednje rezultate
.
Kot lahko vidite iz zgornjega primera, so obdelovalci napak po meri zmogljivi v tem smislu
- Omogočajo nam prilagoditev sporočil o napakah.
- Obdelovalec napak po meri lahko vključuje tudi beleženje napak v datoteko / bazo podatkov, pošiljanje e-pošte razvijalcu itd.
Poglejmo zdaj tretjo vrsto obravnave napak. Uporabili bomo PHP vgrajeno funkcijo error_reporting funkcijo. Ima naslednjo osnovno sintakso
TUKAJ,
- »Error_reporting« je funkcija poročanja o napakah PHP
- “$ Report_level" ni obvezen, z njim lahko nastavite raven poročanja. Če ni podana nobena raven poročanja, bo PHP uporabil privzeto raven poročanja o napakah, kot je določena v datoteki php.ini.
Raven poročanja | Opis | Primer |
---|---|---|
E_OPOZORILO | Prikaže samo opozorilna sporočila. Ne ustavi izvajanja skripta | poročanje o napakah (E_OPOZORILO); |
E_NOTICE | Prikaže obvestila, ki se lahko pojavijo med običajnim izvajanjem programa ali so lahko napaka. | poročanje o napakah (E_ OBVESTILO); |
E_USER_ERROR | Prikaže napake, ki jih ustvari uporabnik, tj | poročanje o napakah (E_ USER_ERROR); |
E_USER_WARNING | Prikaže opozorilna sporočila, ki jih ustvari uporabnik | poročanje o napakah (E_USER_WARNING); |
E_USER_NOTICE | Prikaže uporabniška obvestila | poročanje o napakah (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Prikaže napake, ki niso usodne in jih je mogoče odpraviti s pomočjo obdelav napak po meri | poročanje o napakah (E_RECOVERABLE_ERROR); |
E_ALL | Prikaže vse napake in opozorila | poročanje o napakah (E_ ALL); |
Razlika med napakami in izjemami
- Izjeme se vržejo in so namenjene ulovu, medtem ko napake na splošno ni mogoče odpraviti.
-
Izjeme se obravnavajo na objekt usmerjen način.
To pomeni, ko se vrne izjema; ustvari se objekt izjeme, ki vsebuje podrobnosti o izjemi.
Spodnja tabela prikazuje metode objektov izjem
Metoda | Opis | Primer |
---|---|---|
getMessage () | Prikaže sporočilo o izjemi |
getMessage();?> |
getCode () | Prikaže številčno kodo, ki predstavlja izjemo |
getCode();?> |
getFile () | Prikaže ime datoteke in pot, kjer je prišlo do izjeme |
getFile();?> |
getLine () | Prikaže številko vrstice, kjer je prišlo do izjeme |
getLine();?> |
getTrace () | Prikaže matriko povratne sledi pred izjemo |
getTrace());?> |
getPrevious () | Prikaže prejšnjo izjemo pred trenutno |
getPrevious();?> |
getTraceAsString () | Prikaže povratno sled izjeme kot niz namesto polja |
getTraceAsString();?> |
__toString () | Prikaže celotno izjemo kot niz |
__toString();?> |
Spodaj je osnovna sintaksa za vrnitev izjeme.
TUKAJ,
- "Metati" je ključna beseda, ki se uporablja za vrnitev izjeme
- »Nova izjema (...)« ustvari objekt izjeme in kot parameter sporočila posreduje niz »To je izjema«.
Zgornja koda odda naslednje sporočilo.
Zdaj si bomo ogledali primer, ki izvaja izjeme met in ulov.
Spremenili bomo zgornji primer in vključili poskus, met in ulov.
Ima naslednjo osnovno sintakso.
TUKAJ,
- »Try {…}« je blok kode, ki ga je treba izvesti in bi lahko povzročil izjemo
- »Catch (Exception $ e) {…}« je blok kode, ki zajame vrženo izjemo in spremenljivki $ e dodeli objekt izjeme.
Spodnja koda prikazuje osnovni primer izjeme z izvedbo poskusa, metanja in ulova.
Program namerno vrže izjemo, ki jo nato ujame.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Odprite URL http: //localhost/phptuts/exception_handling.php Dobili boste naslednje rezultate.
Prav tako je mogoče ustvariti več izjem za en stavek php try, odvisno od vrste vržene izjeme.
Glej članek o MySQL, PHP dostop do podatkov
… Za primere izvedbe več izjemVeč izjem
Večkratna izjema za obdelavo vrženih izjem uporablja več poskusnih blokov. Več izjem je koristnih, kadar;
- Prikazati želite prilagojeno sporočilo glede na vrženo izjemo
- Izvesti želite edinstveno operacijo, odvisno od vržene izjeme
Spodnji diagram poteka prikazuje, kako deluje več izjem
Oglejmo si primer, ki uporablja več izjem.
Spremenili bomo kodo, ki deli število s posredovanim imenovalcem.
Pričakujemo dve vrsti izjem;
- Delitev z ničlo
- Delitev z negativnim številom
Zaradi poenostavitve bomo v izbirnih blokih prikazali samo vrsto izjem.
PHP, vgrajen v razred izjem, se uporablja za vrnitev izjem.
Ustvarili bomo dva razreda, ki razširita razred izjem in jih uporabimo za metanje izjem.
Spodnja koda prikazuje izvedbo.
Testiranje kode
Predvidevamo, da ste multiple_exceptions.php shranili v mapo phptuts.
Poiščite URL http: //localhost/phptuts/multiple_exceptions.php
Preklopite nazaj na datoteko PHP in podajte -1 kot parameter, kot je prikazano na naslednjem diagramu.
Poiščite URL http: //localhost/phptuts/multiple_exceptions.php .
Kakšne rezultate dobite? Kot parameter podajte 3.
Kakšne rezultate dobite?
Povzetek
- Napake so nepričakovani rezultati, ki jih povzroči koda PHP
- Obravnavanje napak izboljša zmogljivost aplikacije
- PHP ima vgrajene funkcije, s katerimi lahko prilagodite način poročanja PHP o napakah
- Izjeme so kot napake, vendar jih je mogoče ujeti z blokom catch, ko jih vržemo.
- Prikazovanje sporočil o napakah, ki prikazujejo informacije o napakah, velja za slabo varnostno prakso.