Arduino

PHP Try Catch Voorbeeld: Exception & Error Handling Tutorial

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 een onverwacht programma resultaat dat kan worden afgehandeld door het programma zelf.

Voorbeelden van uitzonderingen zijn onder meer proberen een bestand te openen dat niet bestaat.

Deze uitzondering kan worden afgehandeld door het bestand te maken of door de gebruiker een optie te geven om naar het bestand te zoeken.

In deze tutorial leer je:

Waarom omgaan met uitzondering?

PHP Foutafhandeling

Wanneer er een fout optreedt, toont PHP, afhankelijk van uw configuratie instellingen, het foutbericht in de webbrowser met informatie over de opgetreden fout.

PHP biedt een aantal manieren om fouten af ​​te handelen.

We gaan kijken naar drie (3) veelgebruikte methoden;

Foutafhandeling voorbeelden

Laten we nu eens kijken naar enkele eenvoudige voorbeelden met foutafhandelingsroutines.

Laten we veronderstellen 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.
<? Php
$denominator  = 0;
echo 2 / $denominator ;
?>

Ervan uitgaande dat u het bestand simple_error.php in de map Phptuts hebt opgeslagen, opent u de URL http://localhost/phptuts/simple_error.php

U krijgt de volgende resultaten

Zoals u kunt zien aan de hand van de bovenstaande resultaten, ziet onze applicatie er onprofessioneel uit en kan deze vervelend zijn voor de gebruiker.

We zullen de bovenstaande code aanpassen en een fouthandler voor de toepassing schrijven

<? Php
$denominator = 0;
if ($denominator != 0)  {
  echo 2 / $ denominator;
} else {
  echo "kan niet delen door nul (0)";
};
?>

Ervan uitgaande dat u de bovenstaande code hebt opgeslagen als error_handling.php, opent u de URL http: //localhost/phptuts/error_handling.php

Opmerking: het is een goede beveiligingspraktijk om een ​​bericht weer te geven als het bericht hierboven weergegeven in plaats van het bericht zoals "Bestand niet gevonden" te tonen.

Laten we naar een ander voorbeeld kijken dat een aangepaste foutafhandelaar gebruikt.

De aangepaste foutafhandelaar zal worden ingesteld als de standaard PHP foutafhandelingsfunctie en zal in principe een foutnummer en bericht weergeven.

De onderstaande code illustreert de implementatie van het bovenstaande voorbeeld

<? Php
function  my_error_handler($error_no, $error_msg)
{
  echo "Oeps, er ging iets mis:";
  echo "Foutnummer: [$error_no]";
  echo "Foutbeschrijving: [$error_msg]";
}
set_error_handler("my_error_handler");
echo (5 / 0);
?>

Open de URL http: //localhost/phptuts/custom_error_handler.php u krijgt de volgende resultaten

Zoals je kunt zien aan de hand van het bovenstaande voorbeeld, zijn aangepaste foutafhandelingseenheden krachtig in die zin

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

<? Php
error_reporting ($reporting_level);
?>
Rapportage niveau Omschrijving Voorbeeld
E_WARNING Geeft alleen waarschuwingsberichten weer. Stopt de uitvoering van het script niet error_reporting(E_WARNING);
E_NOTICE Geeft meldingen 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 gebruikers gegenereerde fouten weer, dwz aangepaste foutafhandelingsroutine 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 de gebruiker gegenereerde kennisgevingen weer error_reporting(E_USER_NOTICE);
E_RECOVERABLE_ERROR Geeft een fout weer die niet fataal is en kan worden afgehandeld met behulp van aangepaste foutafhandelingssystemen error_reporting(E_RECOVERABLE_ERROR);
E_ALL Geeft alle fouten en waarschuwingen weer error_reporting(E_ ALL);

Verschil tussen fouten en uitzonderingen

Dit betekent wanneer een uitzondering wordt gegenereerd; er wordt een uitzonderings object gemaakt met de uitzonderingsdetails.

De onderstaande tabel toont de methoden voor uitzonderingsobjecten

Methode Omschrijving Voorbeeld
GetMessage() Geeft het bericht van de uitzondering weer <? Php
echo $e->getMessage();
?>
getCode() Geeft de numerieke code weer die de uitzondering vertegenwoordigt <? Php
echo $e->getCode();
?>
getFile() Geeft de bestandsnaam en het pad weer waar de uitzondering heeft plaatsgevonden <? Php
echo $e->getFile();
?>
getLine() Geeft het regelnummer weer waar de uitzondering plaatsvond <? Php
echo $e->getLine();
?>
getTrace() Geeft een array van de backtrace vóór de uitzondering weer <? Php
print_r($e->getTrace());
?>
getPrevious() Geeft de vorige uitzondering weer vóór de huidige <? Php
echo $e->getPrevious();
?>
getTraceAsString() Geeft de backtrace van de uitzondering weer als een tekenreeks in plaats van een array <? Php
echo $e->getTraceAsString();
?>
__toString() Geeft de volledige uitzondering weer als een tekenreeks <? Php
echo $ e->__toString();
?>

Hieronder staat de basissyntaxis voor throwing van een uitzondering.

<? Php
throw new Exception("Dit is een uitzonderings voorbeeld");
?>

De bovenstaande code voert het volgende bericht uit.

We gaan nu kijken naar een voorbeeld dat de uitzonderingen voor gooien en vangen implementeert.

We zullen het bovenstaande voorbeeld wijzigen en het proberen, gooien en vangen bevatten.

Het heeft de volgende basissyntaxis.

<? Php
try {
    // code gaat hier die mogelijk een uitzondering kan maken
}
catch (Exception $e) {
    // code voor het afhandelen van uitzonderingen hier
}
?>

De onderstaande code toont het eenvoudige uitzonderingsvoorbeeld met de try , throw en catch uitzondering geïmplementeerd.

Het programma gooit opzettelijk een uitzondering die het vervolgens vangt.

<? Php
try {
    $var_msg = "Dit is een  uitzonderingsvoorbeeld";;
    throw new Exception($var_msg);
}
catch (Exception $e) {
    echo "Message: " . $e->getMessage();
    echo "";
    echo "getCode(): " . $e->getCode();
    echo "";
    echo "__toString(): " . $e->__toString();
}
?>

Open de URL http: //localhost/phptuts/exception_handling.php U krijgt de volgende resultaten.

Het is ook mogelijk om meerdere uitzonderingen te maken voor één php try instructie, afhankelijk van het type uitzondering dat wordt gegenereerd.

Zie het artikel over MySQL, PHP gegevenstoegang ... voor implementatievoorbeelden van meerdere uitzonderingen

Meerdere uitzonderingen

Meerdere uitzonderingen gebruiken meerdere blokkeringen voor try catch om met de gegooide uitzonderingen om te gaan. Meerdere uitzonderingen zijn handig wanneer;

Het onderstaande stroomdiagram illustreert hoe meerdere uitzonderingen werken

Laten we eens kijken naar een voorbeeld dat meerdere uitzonderingen gebruikt.

We zullen de code die een getal verdeelt, wijzigen door de aangenomen in noemer.

We verwachten dat er twee soorten uitzonderingen zullen zijn;

Voor de eenvoud zullen we alleen het uitzonderingstype in onze vangblokken weergeven.

De in Exception klasse ingebouwde PHP wordt gebruikt om uitzonderingen te maken.

We zullen twee klassen maken die de uitzonderingsklasse uitbreiden en gebruiken om uitzonderingen te maken.

De onderstaande code toont de implementatie.

<? Php
class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};
function process($denominator)
{
	try
	{
		if ($denominator == 0)
		{
			throw new DivideByZeroException();
		}
		else if ($denominator < 0)
		{
			throw new DivideByNegativeException();
		}
		else
		{
			echo 25 / $denominator;
		}
	}
	catch (DivideByZeroException $ex)
	{
		echo "DIVIDE BY ZERO EXCEPTION!";
	}
	catch (DivideByNegativeException $ex)
	{
		echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!";
	}
	catch (Exception $x)
	{
	echo "UNKNOWN EXCEPTION!";
	}
}
process(0);
?>

De code testen

We gaan ervan uit dat u multiple_exceptions.php in de map phptuts hebt opgeslagen.

Blader naar de URL http: //localhost/phptuts/multiple_exceptions.php

Schakel terug naar het PHP bestand en geef -1 door als parameter zoals weergegeven in het volgende diagram.

Blader naar de URL http: //localhost/phptuts/multiple_exceptions.php .

Welke resultaten krijg je? Geef pas 3 op als parameter.

Welke resultaten krijg je?

Samenvatting

Vorige Volgende