Š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;
- 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.
- Prilagođeni rukovatelji pogreškama - to su korisnički definirane funkcije koje se pozivaju kad god se dogodi greška.
- 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 iznimakaViš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.