Wat is een uitzondering?
Een fout is een onverwacht programma-resultaat dat niet door het programma zelf kan worden afgehandeld.
Fouten worden opgelost door het programma te repareren. Een voorbeeld van een fout is een oneindige lus die nooit stopt met uitvoeren.
Een uitzondering is het onverwachte programmaresultaat dat door het programma zelf kan worden afgehandeld.
Voorbeelden van uitzonderingen zijn onder meer het proberen om een bestand te openen dat niet bestaat.
Deze uitzondering kan worden afgehandeld door het bestand te maken of de gebruiker de mogelijkheid te bieden om naar het bestand te zoeken.
In deze tutorial leer je-
- Waarom uitzonderingen afhandelen?
- PHP Foutafhandeling
- Voorbeelden van foutafhandeling
- Verschil tussen fouten en uitzonderingen
- Meerdere uitzonderingen
- De code testen
Waarom uitzonderingen afhandelen?
- Voorkom onverwachte resultaten op onze pagina's die erg vervelend of irritant kunnen zijn voor onze eindgebruikers
- Verbeter de beveiliging van onze applicaties door geen informatie vrij te geven die kwaadwillende gebruikers kunnen gebruiken om onze applicaties aan te vallen
- Php-uitzonderingen worden gebruikt om de normale stroom van een programma te wijzigen als er een voorspelbare fout optreedt.
PHP Foutafhandeling
Als er een fout optreedt, geeft PHP, afhankelijk van uw configuratie-instellingen, het foutbericht weer in de webbrowser met informatie over de opgetreden fout.
PHP biedt een aantal manieren om met fouten om te gaan.
We gaan kijken naar drie (3) veelgebruikte methoden;
- Die statements - de die-functie combineert de echo- en exitfunctie in één. Het is erg handig als we een bericht willen uitvoeren en de uitvoering van het script willen stoppen als er een fout optreedt.
- Aangepaste foutafhandelaars - dit zijn door de gebruiker gedefinieerde functies die worden aangeroepen wanneer er een fout optreedt.
- PHP-foutrapportage - het foutbericht is afhankelijk van uw PHP-instellingen voor foutrapportage. Deze methode is erg handig in een ontwikkelomgeving als u geen idee heeft wat de fout heeft veroorzaakt. De weergegeven informatie kan u helpen bij het debuggen van uw toepassing.
Voorbeelden van foutafhandeling
Laten we nu eens kijken naar enkele eenvoudige voorbeelden met routines voor het afhandelen van fouten.
Stel dat we een applicatie hebben ontwikkeld die tekstbestanden gebruikt om gegevens op te slaan. We willen misschien controleren of het bestand bestaat voordat we proberen er gegevens uit te lezen.
De onderstaande code implementeert het bovenstaande voorbeeld.
Ervan uitgaande dat u het bestand simple_error.php in de phptuts-map hebt opgeslagen, opent u de URL http: //localhost/phptuts/simple_error.php
U krijgt de volgende resultaten
Zoals je kunt zien aan de hand van de bovenstaande resultaten, ziet onze applicatie er onprofessioneel uit en kan het irritant zijn voor de gebruiker.
We zullen de bovenstaande code wijzigen en een foutafhandelaar voor de applicatie schrijven
Ervan uitgaande dat u de bovenstaande code hebt opgeslagen als error_handling.php, open dan de URL http: //localhost/phptuts/error_handling.php
Opmerking: het is een goede beveiligingspraktijk om een bericht weer te geven zoals hierboven weergegeven in plaats van het bericht als "Bestand niet gevonden" weer te geven.
Laten we eens kijken naar een ander voorbeeld dat een aangepaste foutafhandelaar gebruikt.
De aangepaste foutafhandelaar wordt ingesteld als de standaard PHP-foutafhandelingsfunctie en geeft in feite een foutnummer en bericht weer.
De onderstaande code illustreert de implementatie van het bovenstaande voorbeeld
Open de URL http: //localhost/phptuts/custom_error_handler.php en je krijgt de volgende resultaten
Zoals u in het bovenstaande voorbeeld kunt zien, zijn aangepaste foutafhandelaars krachtig in die zin dat
- Ze stellen ons in staat om de foutmeldingen aan te passen.
- De aangepaste foutafhandelaar kan ook foutregistratie in een bestand / database bevatten, een e-mail sturen naar de ontwikkelaar enz.
Laten we nu kijken naar het derde type foutafhandeling. We zullen de in PHP ingebouwde functie error_reporting-functie gebruiken. Het heeft de volgende basissyntaxis
HIER,
- "Error_reporting" is de PHP-foutrapportagefunctie
- "$ Reporting_level" is optioneel, kan gebruikt worden om het rapporteringsniveau in te stellen. Als er geen rapporteringsniveau is gespecificeerd, zal PHP het standaard foutrapporteringsniveau gebruiken zoals gespecificeerd in het php.ini-bestand.
Rapporteringsniveau | Omschrijving | Voorbeeld |
---|---|---|
E_WAARSCHUWING | Geeft alleen waarschuwingsberichten weer. Stopt de uitvoering van het script niet | error_reporting (E_WARNING); |
E_NOTICE | Geeft mededelingen weer die kunnen optreden tijdens de normale uitvoering van een programma of die een fout kunnen zijn. | error_reporting (E_ NOTICE); |
E_USER_ERROR | Geeft door de gebruiker gegenereerde fouten weer, dwz een aangepaste foutafhandelaar | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Geeft door de gebruiker gegenereerde waarschuwingsberichten weer | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Geeft door gebruikers gegenereerde kennisgevingen weer | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Geeft fouten weer die niet fataal zijn en kunnen worden afgehandeld met behulp van aangepaste foutafhandelaars | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Geeft alle fouten en waarschuwingen weer | error_reporting (E_ ALL); |
Verschil tussen fouten en uitzonderingen
- Er worden uitzonderingen gegenereerd en bedoeld om te worden opgevangen, terwijl fouten over het algemeen niet kunnen worden hersteld.
-
Uitzonderingen worden objectgeoriënteerd afgehandeld.
Dit betekent dat wanneer er een uitzondering wordt gegenereerd; er wordt een uitzonderingsobject gemaakt dat de uitzonderingsdetails bevat.
De onderstaande tabel toont de methoden voor uitzonderingsobjecten
Methode | Omschrijving | Voorbeeld |
---|---|---|
getMessage () | Geeft het bericht van de uitzondering weer |
getMessage();?> |
getCode () | Geeft de numerieke code weer die de uitzondering vertegenwoordigt |
getCode();?> |
getFile () | Geeft de bestandsnaam en het pad weer waar de uitzondering optrad |
getFile();?> |
getLine () | Geeft het regelnummer weer waar de uitzondering optrad |
getLine();?> |
getTrace () | Geeft een array van de backtrace weer vóór de uitzondering |
getTrace());?> |
getPrevious () | Geeft de vorige uitzondering weer vóór de huidige |
getPrevious();?> |
getTraceAsString () | Geeft de backtrace van de uitzondering weer als een tekenreeks in plaats van een array |
getTraceAsString();?> |
__toString () | Geeft de volledige uitzondering weer als een tekenreeks |
__toString();?> |
Hieronder vindt u de basissyntaxis voor het genereren van een uitzondering.
HIER,
- "Throw" is het sleutelwoord dat wordt gebruikt om de uitzondering te genereren
- "Nieuwe uitzondering (…)" maakt een uitzonderingsobject aan en geeft de tekenreeks "Dit is een voorbeeld van een uitzondering" door als de berichtparameter.
De bovenstaande code geeft het volgende bericht weer.
We gaan nu kijken naar een voorbeeld dat de throw and catch-uitzonderingen implementeert.
We zullen het bovenstaande voorbeeld aanpassen en de try, throw en catch opnemen.
Het heeft de volgende basissyntaxis.
HIER,
- "Probeer {…}" is het codeblok dat moet worden uitgevoerd dat mogelijk een uitzondering kan veroorzaken
- "Catch (Exception $ e) {…}" is het codeblok dat de gegenereerde uitzondering opvangt en het exception-object toewijst aan de variabele $ e.
De onderstaande code toont het standaard uitzonderingsvoorbeeld met de try, throw en catch-uitzondering geïmplementeerd.
Het programma gooit opzettelijk een uitzondering die het vervolgens opvangt.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Open de URL http: //localhost/phptuts/exception_handling.php Je krijgt de volgende resultaten.
Het is ook mogelijk om meerdere uitzonderingen te maken voor één php-instructie try, afhankelijk van het type uitzondering dat wordt gegenereerd.
Zie het artikel over MySQL, PHP-gegevenstoegang
… Voor implementatievoorbeelden van meerdere uitzonderingenMeerdere uitzonderingen
Meerdere uitzonderingen gebruiken meerdere try-catch-blokken om de gegooide uitzonderingen af te handelen. Meerdere uitzonderingen zijn handig wanneer;
- U wilt een aangepast bericht weergeven, afhankelijk van de gegenereerde uitzondering
- U wilt een unieke bewerking uitvoeren, afhankelijk van de gegenereerde uitzondering
Het onderstaande stroomschema illustreert hoe meerdere uitzonderingen werken
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.
Welke resultaten krijg je? Geef 3 door als parameter.
Welke resultaten krijg je?
Overzicht
- Fouten zijn onverwachte resultaten die worden geproduceerd door PHP-code
- Foutafhandeling verbetert de prestaties van de applicatie
- PHP heeft ingebouwde functies die kunnen worden gebruikt om de manier waarop PHP fouten rapporteert aan te passen
- Uitzonderingen zijn als fouten, maar ze kunnen worden opgevangen met behulp van het catch-blok wanneer ze worden gegooid.
- Het weergeven van foutmeldingen met foutinformatie wordt als een slechte beveiligingspraktijk beschouwd.