Primjer PHP-a Pokušaj ulova: Iznimka & Vodič za rukovanje pogreškama

Sadržaj:

Anonim

Što je iznimka?

Pogreška je neočekivani rezultat programa s kojim se sam program ne može nositi.

Pogreške se rješavaju popravljanjem programa. Primjer pogreške bila bi beskonačna petlja koja se nikad ne prestaje izvršavati.

Iznimka su neočekivani rezultati programa kojima se sam program može baviti.

Primjeri iznimki uključuju pokušaj otvaranja datoteke koja ne postoji.

Ova se iznimka može riješiti stvaranjem datoteke ili predstavljanjem korisniku mogućnosti pretraživanja datoteke.

U ovom vodiču naučit ćete-

  • Zašto se nositi s iznimkom?
  • PHP rukovanje pogreškama
  • Pogreška pri rukovanju primjerima
  • Razlika između pogrešaka i iznimke
  • Višestruke iznimke
  • Testiranje koda

Zašto se nositi s iznimkom?

  • Izbjegavajte neočekivane rezultate na našim stranicama koji mogu biti vrlo dosadni ili iritantni za naše krajnje korisnike
  • Poboljšajte sigurnost naših aplikacija ne izlažući podatke koje zlonamjerni korisnici mogu koristiti za napad na naše aplikacije
  • Php izuzeci koriste se za promjenu normalnog tijeka programa ako se dogodi bilo kakva predvidljiva pogreška.

PHP rukovanje pogreškama

Kada se dogodi pogreška, ovisno o vašim konfiguracijskim postavkama, PHP prikazuje poruku pogreške u web pregledniku s informacijama u vezi s pogreškom koja se dogodila.

PHP nudi brojne načine za rješavanje pogrešaka.

Razmotrit ćemo tri (3) najčešće korištene metode;

  1. Izjave o umrijevanju - funkcija umrijeti kombinira odjek i izlaznu funkciju u jednom. Vrlo je korisno kada želimo iznijeti poruku i zaustaviti izvršavanje skripte kad se dogodi greška.
  2. Prilagođeni rukovatelji pogreškama - to su korisnički definirane funkcije koje se pozivaju kad god se dogodi greška.
  3. Izvješćivanje o PHP pogreškama - poruka o pogrešci, ovisno o postavkama izvještavanja o PHP pogreškama. Ova je metoda vrlo korisna u razvojnom okruženju kada nemate pojma što je uzrokovalo pogrešku. Prikazani podaci mogu vam pomoći u otklanjanju pogrešaka u aplikaciji.

Pogreška pri rukovanju primjerima

Pogledajmo sada nekoliko jednostavnih primjera s rutinama rukovanja pogreškama.

Pretpostavimo da smo razvili aplikaciju koja za pohranu podataka koristi tekstualne datoteke. Možda bismo htjeli provjeriti postoji li datoteka prije nego što pokušamo pročitati podatke iz nje.

Kôd u nastavku implementira gornji primjer.

Pod pretpostavkom da ste datoteku simple_error.php spremili u mapu phptuts, otvorite URL http: //localhost/phptuts/simple_error.php

Dobit ćete sljedeće rezultate

Kao što možete vidjeti iz gornjih rezultata, naša aplikacija izgleda neprofesionalno i može biti neugodna za korisnika.

Izmijenit ćemo gornji kod i napisati obrađivač pogrešaka za aplikaciju

Pod pretpostavkom da ste gornji kôd spremili kao error_handling.php, otvorite URL http: //localhost/phptuts/error_handling.php

Napomena: dobra je sigurnosna praksa prikazivati ​​poruku kao ona prikazana gore, umjesto da prikazuje poruku poput "Datoteka nije pronađena".

Pogledajmo još jedan primjer koji koristi prilagođeni rukovatelj pogreškama.

Prilagođeni rukovatelj pogreškama postavit će se kao zadana funkcija rukovanja pogreškama PHP-a i u osnovi će prikazati broj pogreške i poruku.

Donji kod ilustrira provedbu gornjeg primjera

Otvorite URL http: //localhost/phptuts/custom_error_handler.php dobit ćete sljedeće rezultate

.

Kao što možete vidjeti iz gornjeg primjera, prilagođeni rukovatelji pogreškama su moćni u smislu da

  • Omogućuju nam prilagodbu poruka o pogreškama.
  • Prilagođeni rukovatelj pogreškama također može uključivati ​​prijavu pogrešaka u datoteku / bazu podataka, slanje e-pošte programeru itd.

Pogledajmo sada treću vrstu rukovanja pogreškama. Koristit ćemo PHP ugrađenu funkciju error_reporting funkciju. Ima sljedeću osnovnu sintaksu

OVDJE,

  • "Error_reporting" je PHP funkcija izvještavanja o pogreškama
  • "$ Report_level" nije obavezan, može se koristiti za postavljanje razine izvještavanja. Ako nije navedena razina izvještavanja, PHP će upotrijebiti zadanu razinu izvještavanja o pogreškama kako je navedeno u datoteci php.ini.
Razina izvještavanja Opis Primjer
E_UPOZORENJE Prikazuje samo poruke upozorenja. Ne zaustavlja izvršavanje skripte izvještavanje o pogreškama (E_UPOZORENJE);
E_NOTICE Prikazuje obavijesti koje se mogu pojaviti tijekom normalnog izvršavanja programa ili mogu biti pogreška. prijava pogreške (E_ OBAVIJEST);
E_USER_ERROR Prikazuje pogreške koje su stvorili korisnici, tj. Prilagođeni rukovatelj pogreškama izvještavanje o pogrešci (E_ USER_ERROR);
E_USER_ UPOZORENJE Prikazuje poruke upozorenja koje generira korisnik izvještavanje o pogreškama (E_USER_WARNING);
E_USER_NOTICE Prikazuje obavijesti koje su generirali korisnici izvještavanje o pogreškama (E_USER_NOTICE);
E_RECOVERABLE_ERROR Prikazuje pogrešku koja nije fatalna i može se riješiti pomoću prilagođenih rukovatelja pogreškama izvještavanje o pogrešci (E_RECOVERABLE_ERROR);
E_ALL Prikazuje sve pogreške i upozorenja izvještavanje o pogreškama (E_ SVE);

Razlika između pogrešaka i iznimke

  • Iznimke se izbacuju i namjeravaju uhvatiti, dok se pogreške uglavnom ne mogu popraviti.
  • Iznimke se obrađuju na objektno orijentirani način.

    To znači kad se izuzme izuzetak; stvara se objekt iznimke koji sadrži detalje iznimke.

Tablica u nastavku prikazuje metode objekata iznimke

Metoda Opis Primjer
getMessage () Prikazuje poruku iznimke
getMessage();?>
getCode () Prikazuje numerički kôd koji predstavlja iznimku
getCode();?>
getFile () Prikazuje ime datoteke i put na kojem se dogodila iznimka
getFile();?>
getLine () Prikazuje broj retka na kojem se dogodila iznimka
getLine();?>
getTrace () Prikazuje niz povratnih tragova prije iznimke
getTrace());?>
getPrevious () Prikazuje prethodnu iznimku prije trenutne
getPrevious();?>
getTraceAsString () Prikazuje backtrace iznimke kao niz umjesto niza
getTraceAsString();?>
__toString () Prikazuje cijelu iznimku kao niz
__toString();?>

Ispod je osnovna sintaksa za izbacivanje iznimke.

OVDJE,

  • "Baciti" je ključna riječ koja se koristi za bacanje iznimke
  • "Nova iznimka (...)" stvara objekt iznimke i prosljeđuje niz "Ovo je primjer iznimke" kao parametar poruke.

Gornji kod daje sljedeću poruku.

Sada ćemo pogledati primjer koji provodi iznimke bacanja i ulova.

Izmijenit ćemo gornji primjer i uključiti pokušaj, bacanje i ulov.

Ima sljedeću osnovnu sintaksu.

OVDJE,

  • "Try {…}" je blok koda koji se treba izvršiti i koji bi mogao stvoriti izuzetak
  • “Catch (Exception $ e) {…}” je blok koda koji hvata izbačenu iznimku i dodjeljuje objekt iznimke varijabli $ e.

Dolje navedeni kod prikazuje osnovni primjer iznimke s implementiranom iznimkom try, throw and catch.

Program namjerno baca iznimku koju zatim uhvati.

getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>

Otvorite URL http: //localhost/phptuts/exception_handling.php Dobit ćete sljedeće rezultate.

Također je moguće stvoriti više iznimaka za jednu php izjavu try, ovisno o vrsti izbačene iznimke.

Pogledajte članak o MySQL, PHP pristup podacima

... za primjere primjene višestrukih iznimaka

Višestruke iznimke

Višestruka iznimka koristi višestruke blokove try catch za obradu bačenih iznimki. Višestruke iznimke korisne su kada;

  • Želite prikazati prilagođenu poruku, ovisno o izbačenoj iznimci
  • Želite izvesti jedinstvenu operaciju, ovisno o izbačenoj iznimci

Dijagram toka u nastavku ilustrira kako funkcioniraju višestruke iznimke

Pogledajmo primjer koji koristi višestruke iznimke.

Izmijenit ćemo kod koji dijeli broj s dodanim nazivnikom.

Očekujemo da će se pojaviti dvije vrste iznimaka;

  • Podjela s nulom
  • Podjela s negativnim brojem

Radi jednostavnosti prikazat ćemo samo vrstu iznimke u našim blokovima ulova.

PHP ugrađen u klasu Exception koristi se za izbacivanje iznimaka.

Stvorit ćemo dvije klase koje proširuju klasu iznimke i koristiti ih za bacanje iznimki.

Kôd u nastavku prikazuje implementaciju.

Testiranje koda

Pretpostavit ćemo da ste spremili multiple_exceptions.php u mapu phptuts.

Dođite do URL-a http: //localhost/phptuts/multiple_exceptions.php

Vratite se na PHP datoteku i dodajte -1 kao parametar kao što je prikazano na sljedećem dijagramu.

Dođite do URL-a http: //localhost/phptuts/multiple_exceptions.php .

Kakve rezultate postižete? Položite 3 kao parametar.

Kakve rezultate postižete?

Sažetak

  • Pogreške su neočekivani rezultati koje stvara PHP kôd
  • Rukovanje pogreškama poboljšava izvedbu aplikacije
  • PHP ima ugrađene funkcije koje se mogu koristiti za prilagodbu načina na koji PHP prijavljuje pogreške
  • Iznimke su poput pogrešaka, ali ih se može uhvatiti pomoću bloka catch kada se bace.
  • Prikazivanje poruka o pogreškama koje prikazuju informacije o pogreškama smatra se lošom sigurnosnom praksom.