Hva er et unntak?
En feil er et uventet programresultat som ikke kan håndteres av selve programmet.
Feil løses ved å fikse programmet. Et eksempel på en feil vil være en uendelig sløyfe som aldri slutter å kjøre.
Et unntak er uventet programresultat som kan håndteres av selve programmet.
Eksempler på unntak inkluderer å prøve å åpne en fil som ikke eksisterer.
Dette unntaket kan håndteres ved å enten opprette filen eller gi brukeren muligheten til å søke etter filen.
I denne veiledningen vil du lære-
- Hvorfor håndtere unntak?
- PHP Feilhåndtering
- Feilhåndteringseksempler
- Forskjellen mellom feil og unntak
- Flere unntak
- Testing av koden
Hvorfor håndtere unntak?
- Unngå uventede resultater på sidene våre, som kan være veldig irriterende eller irriterende for sluttbrukerne våre
- Forbedre sikkerheten til applikasjonene våre ved ikke å avsløre informasjon som ondsinnede brukere kan bruke til å angripe applikasjonene våre
- Php-unntak brukes til å endre normalflyt i et program hvis det oppstår en forutsigbar feil.
PHP Feilhåndtering
Når det oppstår en feil, avhengig av konfigurasjonsinnstillingene, viser PHP feilmeldingen i nettleseren med informasjon om feilen som oppstod.
PHP tilbyr en rekke måter å håndtere feil på.
Vi skal se på tre (3) vanlige metoder;
- Die uttalelser - die funksjonen kombinerer ekko og exit funksjonen i en. Det er veldig nyttig når vi ønsker å sende en melding og stoppe kjøringen av skriptet når en feil oppstår.
- Tilpassede feilhåndterere - dette er brukerdefinerte funksjoner som kalles når en feil oppstår.
- PHP feilrapportering - feilmeldingen avhengig av innstillingene for PHP feilrapportering. Denne metoden er veldig nyttig i utviklingsmiljø når du ikke aner hva som forårsaket feilen. Informasjonen som vises, kan hjelpe deg med å feilsøke søknaden din.
Feilhåndteringseksempler
La oss nå se på noen enkle eksempler med feilhåndteringsrutiner.
La oss anta at vi har utviklet et program som bruker tekstfiler til å lagre data. Vi vil kanskje sjekke om filen eksisterer før vi prøver å lese data fra den.
Koden nedenfor implementerer eksemplet ovenfor.
Forutsatt at du lagret filen simple_error.php i phptuts-mappen, åpne URL http: //localhost/phptuts/simple_error.php
Du får følgende resultater
Som du kan se fra resultatene ovenfor, gjør det at applikasjonen vår ser uprofesjonell ut og kan være irriterende for brukeren.
Vi vil endre koden ovenfor og skrive en feilbehandler for applikasjonen
Forutsatt at du lagret koden ovenfor som error_handling.php, åpner du URL: en http: //localhost/phptuts/error_handling.php
Merk: det er en god sikkerhetspraksis å vise en melding som vist ovenfor i stedet for å vise meldingen som "Filen ble ikke funnet".
La oss se på et annet eksempel som bruker en tilpasset feilbehandler.
Den tilpassede feilbehandleren vil bli angitt som standard PHP-feilhåndteringsfunksjon og vil i utgangspunktet vise feilnummer og melding.
Koden nedenfor illustrerer implementeringen av eksemplet ovenfor
Åpne URL http: //localhost/phptuts/custom_error_handler.php, du får følgende resultater
.
Som du kan se fra eksemplet ovenfor, er tilpassede feilbehandlere kraftige i den forstand at
- De lar oss tilpasse feilmeldingene.
- Den tilpassede feilbehandleren kan også inkludere feillogging i en fil / database, sende e-post til utvikleren etc.
La oss nå se på den tredje typen feilhåndtering. Vi bruker PHP innebygd funksjon error_reporting funksjon. Den har følgende grunnleggende syntaks
HER,
- “Error_reporting” er PHP-feilrapporteringsfunksjonen
- “$reporting_level" is optional, can be used to set the reporting level. If no reporting level has been specified, PHP will use the default error reporting level as specified in the php.ini file.
Reporting Level | Description | Example |
---|---|---|
E_WARNING | Displays warning messages only. Does not halt the execution of the script | error_reporting(E_WARNING); |
E_NOTICE | Displays notices that can occur during normal execution of a program or could be an error. | error_reporting(E_ NOTICE); |
E_USER_ERROR | Displays user generated errors i.e. custom error handler | error_reporting(E_ USER_ERROR); |
E_USER_WARNING | Displays user generated warning messages | error_reporting(E_USER_WARNING); |
E_USER_NOTICE | Displays user generated notices | error_reporting(E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Displays error that are not fatal and can be handled using custom error handlers | error_reporting(E_RECOVERABLE_ERROR); |
E_ALL | Displays all errors and warnings | error_reporting(E_ ALL); |
Difference between Errors and Exception
- Exceptions are thrown and intended to be caught while errors are generally irrecoverable.
-
Exceptions are handled in an object oriented way.
This means when an exception is thrown; an exception object is created that contains the exception details.
The table below shows the exception object methods
Method | Description | Example |
---|---|---|
getMessage() | Displays the exception’s message |
getMessage();?> |
getCode() | Displays the numeric code that represents the exception |
getCode();?> |
getFile() | Displays the file name and path where the exception occurred |
getFile();?> |
getLine() | Displays the line number where the exception occurred |
getLine();?> |
getTrace() | Displays an array of the backtrace before the exception |
getTrace());?> |
getPrevious() | Displays the previous exception before the current one |
getPrevious();?> |
getTraceAsString() | Displays the backtrace of the exception as a string instead of an array |
getTraceAsString();?> |
__toString() | Displays the entire exception as a string |
__toString();?> |
Below is the basic syntax for throwing an exception.
HERE,
- “throw” is the keyword used to throw the exception
- “new Exception(… )” creates an exception object and passes “This is an exception example “ string as the message parameter.
The above code outputs the following message.
We are now going to look at an example that implements the throw and catch exceptions.
We will modify the above example and include the try, throw and catch.
It has the following basic syntax.
HERE,
- “try{… }” is the block of code to be executed that could potentially raise an exception
- “catch(Exception $e){… }” is the block of code that catches the thrown exception and assigns the exception object to the variable $e.
Koden nedenfor viser det grunnleggende unntakseksemplet med prøv, kast og fangst unntak implementert.
Programmet kaster bevisst et unntak som det deretter fanger.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Åpne URL http: //localhost/phptuts/exception_handling.php Du får følgende resultater.
Det er også mulig å opprette flere unntak for en php-prøveerklæring, avhengig av typen unntak som kastes.
Se artikkelen om MySQL, PHP-datatilgang
... for implementeringseksempler på flere unntakFlere unntak
Flere unntak bruker flere prøvefangstblokker for å håndtere unntakene som kastes. Flere unntak er nyttige når;
- Du vil vise en tilpasset melding avhengig av unntaket som kastes
- Du vil utføre en unik operasjon avhengig av unntaket som kastes
Flytskjemaet nedenfor illustrerer hvordan flere unntak fungerer
Let’s look at an example that uses multiple exceptions.
We will modify the code that divides a number by the passed in denominator.
We expect two types of exceptions to occur;
- Division by zero
- Division by a negative number
For simplicity’s sake, we will only display the exception type in our catch blocks.
The PHP built in Exception class is used to throw exceptions.
We will create two classes that extend the exception class and use them to throw exceptions.
The code below shows the implementation.
Testing the code
We will assume you saved multiple_exceptions.php in phptuts folder.
Browse to the URL http://localhost/phptuts/multiple_exceptions.php
Switch back to the PHP file and pass -1 as the parameter as shown in the following diagram.
Browse to the URL http://localhost/phptuts/multiple_exceptions.php.
Hvilke resultater får du? Pass 3 som parameter.
Hvilke resultater får du?
Sammendrag
- Feil er uventede resultater produsert av PHP-kode
- Feilhåndtering forbedrer applikasjonsytelsen
- PHP har innebygd funksjoner som kan brukes til å tilpasse måten PHP rapporterer feil på
- Unntak er som feil, men de kan fanges opp ved hjelp av fangstblokken når de kastes.
- Å vise feilmeldinger som viser feilinformasjon betraktes som en dårlig sikkerhetspraksis.