Hvad er en undtagelse?
En fejl er et uventet programresultat, der ikke kan håndteres af selve programmet.
Fejl løses ved at rette programmet. Et eksempel på en fejl ville være en uendelig løkke, der aldrig stopper med at udføre.
En undtagelse er uventet programresultat, der kan håndteres af selve programmet.
Eksempler på undtagelser inkluderer forsøg på at åbne en fil, der ikke findes.
Denne undtagelse kan håndteres ved enten at oprette filen eller præsentere brugeren for en mulighed for at søge efter filen.
I denne vejledning lærer du-
- Hvorfor håndtere undtagelse?
- PHP Fejlhåndtering
- Fejlhåndteringseksempler
- Forskel mellem fejl og undtagelse
- Flere undtagelser
- Test af koden
Hvorfor håndtere undtagelse?
- Undgå uventede resultater på vores sider, som kan være meget irriterende eller irriterende for vores slutbrugere
- Forbedre vores applikations sikkerhed ved ikke at udsætte oplysninger, som ondsindede brugere kan bruge til at angribe vores applikationer
- Php-undtagelser bruges til at ændre et programs normale flow, hvis der opstår en forudsigelig fejl.
PHP Fejlhåndtering
Når der opstår en fejl, afhængigt af dine konfigurationsindstillinger, viser PHP fejlmeddelelsen i webbrowseren med oplysninger om den fejl, der opstod.
PHP tilbyder en række måder at håndtere fejl på.
Vi skal se på tre (3) almindeligt anvendte metoder;
- Die-sætninger - die-funktionen kombinerer ekko- og exit-funktionen i en. Det er meget nyttigt, når vi vil sende en besked og stoppe udførelsen af scriptet, når der opstår en fejl.
- Tilpassede fejlhåndterere - disse er brugerdefinerede funktioner, der kaldes, hver gang der opstår en fejl.
- PHP-fejlrapportering - fejlmeddelelsen afhængigt af dine PHP-rapporteringsindstillinger. Denne metode er meget nyttig i udviklingsmiljø, når du ikke har nogen idé om, hvad der forårsagede fejlen. De viste oplysninger kan hjælpe dig med at fejle din applikation.
Fejlhåndteringseksempler
Lad os nu se på nogle enkle eksempler med fejlhåndteringsrutiner.
Lad os antage, at vi har udviklet et program, der bruger tekstfiler til at gemme data. Vi vil muligvis kontrollere for filens eksistens, før vi forsøger at læse data fra den.
Koden nedenfor implementerer ovenstående eksempel.
Forudsat at du gemte filen simple_error.php i phptuts-mappen, skal du åbne URL'en http: //localhost/phptuts/simple_error.php
Du får følgende resultater
Som du kan se fra ovenstående resultater, får det vores applikation til at se uprofessionelt ud og kan være irriterende for brugeren.
Vi vil ændre ovenstående kode og skrive en fejlhåndtering til applikationen
Forudsat at du har gemt ovenstående kode som error_handling.php, skal du åbne URL'en http: //localhost/phptuts/error_handling.php
Bemærk: det er en god sikkerhedspraksis at vise en besked som vist ovenfor i stedet for at vise beskeden som "Fil ikke fundet".
Lad os se på et andet eksempel, der bruger en brugerdefineret fejlhåndterer.
Den brugerdefinerede fejlhåndterer indstilles som standard PHP-fejlhåndteringsfunktion og viser dybest set et fejlnummer og en meddelelse.
Koden nedenfor illustrerer implementeringen af ovenstående eksempel
Åbn URL'en http: //localhost/phptuts/custom_error_handler.php, du får følgende resultater
.
Som du kan se fra ovenstående eksempel, er brugerdefinerede fejlhåndterere effektive i den forstand, at
- De giver os mulighed for at tilpasse fejlmeddelelserne.
- Den brugerdefinerede fejlhåndterer kan også omfatte fejllogning i en fil / database, e-mail til udvikleren osv.
Lad os nu se på den tredje type fejlhåndtering. Vi bruger den indbyggede PHP-funktion error_reporting-funktion. Den har følgende grundlæggende syntaks
HER,
- “Error_reporting” er PHP-fejlrapporteringsfunktionen
- “$ Rapporteringsniveau” er valgfrit, kan bruges til at indstille rapporteringsniveauet. Hvis der ikke er angivet noget rapporteringsniveau, bruger PHP standardfejlrapporteringsniveauet som angivet i php.ini-filen.
Rapporteringsniveau | Beskrivelse | Eksempel |
---|---|---|
E_ADVARSEL | Viser kun advarselsmeddelelser. Stopper ikke udførelsen af scriptet | fejlrapportering (E_ADVARSEL); |
E_NOTICE | Viser meddelelser, der kan forekomme under normal udførelse af et program, eller som kan være en fejl. | fejlrapportering (E_ BEMÆRKNING) |
E_USER_ERROR | Viser brugergenererede fejl, dvs. brugerdefineret fejlhåndtering | fejl_rapportering (E_ USER_ERROR); |
E_USER_WARNING | Viser brugergenererede advarselsmeddelelser | fejl_rapportering (E_USER_WARNING); |
E_USER_NOTICE | Viser brugergenererede meddelelser | fejlrapportering (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Viser fejl, der ikke er fatale, og som kan håndteres ved hjælp af brugerdefinerede fejlhåndterere | fejlrapportering (E_RECOVERABLE_ERROR); |
E_ALL | Viser alle fejl og advarsler | fejl_rapportering (E_ ALL); |
Forskel mellem fejl og undtagelse
- Undtagelser kastes og er beregnet til at blive fanget, mens fejl generelt er uoprettelige.
-
Undtagelser håndteres på en objektorienteret måde.
Dette betyder, når en undtagelse kastes; der oprettes et undtagelsesobjekt, der indeholder undtagelsesoplysningerne.
Nedenstående tabel viser undtagelsesobjektmetoderne
Metode | Beskrivelse | Eksempel |
---|---|---|
getMessage () | Viser undtagelsens meddelelse |
getMessage();?> |
få kode() | Viser den numeriske kode, der repræsenterer undtagelsen |
getCode();?> |
getFile () | Viser filnavnet og stien, hvor undtagelsen opstod |
getFile();?> |
getLine () | Viser linjenummeret, hvor undtagelsen opstod |
getLine();?> |
getTrace () | Viser en matrix af backtrace før undtagelsen |
getTrace());?> |
getPrevious () | Viser den forrige undtagelse før den aktuelle |
getPrevious();?> |
getTraceAsString () | Viser undtagelsens backtrace som en streng i stedet for en matrix |
getTraceAsString();?> |
__toString () | Viser hele undtagelsen som en streng |
__toString();?> |
Nedenfor er den grundlæggende syntaks til at kaste en undtagelse.
HER,
- "Kast" er det nøgleord, der bruges til at kaste undtagelsen
- "Ny undtagelse (...)" opretter et undtagelsesobjekt og sender "Dette er et undtagelseseksempel" streng som meddelelsesparameter.
Ovenstående kode udsender følgende meddelelse.
Vi skal nu se på et eksempel, der implementerer undtagelser for kast og fangst.
Vi ændrer ovenstående eksempel og inkluderer prøve, kast og fangst.
Den har følgende grundlæggende syntaks.
HER,
- "Prøv {...}" er den blok af kode, der skal udføres, der potentielt kan skabe en undtagelse
- “Fangst (undtagelse $ e) {...}” er den blok med kode, der fanger den kastede undtagelse og tildeler undtagelsesobjektet til variablen $ e.
Koden nedenfor viser det grundlæggende undtagelseseksempel med undtagelsen prøve, kast og fangst implementeret.
Programmet kaster bevidst en undtagelse, som det derefter fanger.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Åbn URL'en http: //localhost/phptuts/exception_handling.php Du får følgende resultater.
Det er også muligt at oprette flere undtagelser for en php-prøve-sætning afhængigt af typen af undtagelse, der kastes.
Se artiklen om MySQL, PHP-dataadgang
... til eksempler på implementering af flere undtagelserFlere undtagelser
Flere undtagelser brug flere prøvefangstblokke til at håndtere de kastede undtagelser. Flere undtagelser er nyttige, når;
- Du vil have vist en tilpasset besked afhængigt af den undtagelse, der kastes
- Du vil udføre en unik operation afhængigt af den undtagelse, der kastes
Runddiagrammet nedenfor illustrerer, hvordan flere undtagelser fungerer
Lad os se på et eksempel, der bruger flere undtagelser.
Vi ændrer koden, der dividerer et tal med det bestået i nævneren.
Vi forventer, at der forekommer to typer undtagelser;
- Opdeling med nul
- Opdel med et negativt tal
For enkelheds skyld viser vi kun undtagelsestypen i vores fangstblokke.
PHP indbygget i Exception-klasse bruges til at kaste undtagelser.
Vi opretter to klasser, der udvider undtagelsesklassen og bruger dem til at kaste undtagelser.
Koden nedenfor viser implementeringen.
Test af koden
Vi antager, at du har gemt multiple_exceptions.php i phptuts-mappen.
Gå til URL'en http: //localhost/phptuts/multiple_exceptions.php
Skift tilbage til PHP-filen og send -1 som parameter som vist i følgende diagram.
Gå til URL'en http: //localhost/phptuts/multiple_exceptions.php .
Hvilke resultater får du? Pass 3 som parameter.
Hvilke resultater får du?
Resumé
- Fejl er uventede resultater produceret af PHP-kode
- Fejlhåndtering forbedrer applikationens ydeevne
- PHP har indbyggede funktioner, der kan bruges til at tilpasse den måde, hvorpå PHP rapporterer fejl
- Undtagelser er som fejl, men de kan fanges ved hjælp af fangstblokken, når de smides.
- Visning af fejlmeddelelser, der viser fejloplysninger, betragtes som en dårlig sikkerhedspraksis.