Primer poskusa ulova PHP: Izjema & Napaka pri ravnanju z vadnico

Kazalo:

Anonim

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;

  1. 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.
  2. Obdelovalci napak po meri - to so uporabniško določene funkcije, ki se prikličejo vsakič, ko pride do napake.
  3. 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č izjem

Več 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.