PHP Test Catch Exempel: Undantag & Felhandledning

Innehållsförteckning:

Anonim

Vad är ett undantag?

Ett fel är ett oväntat programresultat som inte kan hanteras av själva programmet.

Fel löses genom att fixa programmet. Ett exempel på ett fel skulle vara en oändlig slinga som aldrig slutar köra.

Ett undantag är oväntat programresultat som kan hanteras av själva programmet.

Exempel på undantag är att försöka öppna en fil som inte finns.

Detta undantag kan hanteras genom att antingen skapa filen eller ge användaren möjlighet att söka efter filen.

I den här handledningen lär du dig-

  • Varför hantera undantag?
  • PHP Felhantering
  • Felhanteringsexempel
  • Skillnad mellan fel och undantag
  • Flera undantag
  • Testar koden

Varför hantera undantag?

  • Undvik oväntade resultat på våra sidor som kan vara mycket irriterande eller irriterande för våra slutanvändare
  • Förbättra säkerheten för våra applikationer genom att inte avslöja information som skadliga användare kan använda för att attackera våra applikationer
  • Php-undantag används för att ändra det normala flödet för ett program om något förutsägbart fel uppstår.

PHP Felhantering

När ett fel inträffar, beroende på dina konfigurationsinställningar, visar PHP felmeddelandet i webbläsaren med information om det fel som inträffade.

PHP erbjuder ett antal sätt att hantera fel.

Vi ska titta på tre (3) vanliga metoder;

  1. Die-uttalanden - formfunktionen kombinerar eko- och utgångsfunktionen i en. Det är mycket användbart när vi vill skicka ett meddelande och stoppa skriptkörningen när ett fel inträffar.
  2. Anpassade felhanterare - dessa är användardefinierade funktioner som anropas när ett fel inträffar.
  3. PHP-felrapportering - felmeddelandet beroende på dina PHP-felrapporteringsinställningar. Denna metod är mycket användbar i utvecklingsmiljön när du inte har någon aning om vad som orsakade felet. Informationen som visas kan hjälpa dig att felsöka din applikation.

Felhanteringsexempel

Låt oss nu titta på några enkla exempel med felhanteringsrutiner.

Låt oss anta att vi har utvecklat en applikation som använder textfiler för att lagra data. Vi kanske vill kontrollera om filen finns innan vi försöker läsa data från den.

Koden nedan implementerar exemplet ovan.

Förutsatt att du har sparat filen simple_error.php i mappen phptuts, öppna webbadressen http: //localhost/phptuts/simple_error.php

Du får följande resultat

Som du kan se från ovanstående resultat får det vår applikation att se oprofessionellt ut och kan vara irriterande för användaren.

Vi kommer att ändra koden ovan och skriva en felhanterare för applikationen

Förutsatt att du har sparat ovanstående kod som error_handling.php, öppna webbadressen http: //localhost/phptuts/error_handling.php

Obs! Det är en bra säkerhetspraxis att visa ett meddelande som det som visas ovan istället för att visa meddelandet som ”Filen hittades inte”.

Låt oss titta på ett annat exempel som använder en anpassad felhanterare.

Den anpassade felhanteraren kommer att ställas in som standard PHP-felhanteringsfunktion och visar i princip ett felnummer och ett meddelande.

Koden nedan illustrerar implementeringen av exemplet ovan

Öppna webbadressen http: //localhost/phptuts/custom_error_handler.php så får du följande resultat

.

Som du kan se från ovanstående exempel är anpassade felhanterare kraftfulla i den meningen att

  • De tillåter oss att anpassa felmeddelandena.
  • Den anpassade felhanteraren kan också inkludera felloggning i en fil / databas, e-post till utvecklaren etc.

Låt oss nu titta på den tredje typen av felhantering. Vi använder den inbyggda PHP-funktionen error_reporting-funktionen. Den har följande grundläggande syntax

HÄR,

  • ”Error_reporting” är PHP-felrapporteringsfunktionen
  • “$ Rapporteringsnivå" är valfritt, kan användas för att ställa in rapporteringsnivå. Om ingen rapporteringsnivå har specificerats kommer PHP att använda standardfelrapporteringsnivån som anges i filen php.ini.
Rapporteringsnivå Beskrivning Exempel
E_VARNING Visar endast varningsmeddelanden. Stoppar inte körningen av skriptet felrapportering (E_VARNING);
E_NOTICE Visar meddelanden som kan inträffa vid normal körning av ett program eller som kan vara ett fel. felrapportering (E_ OBS!)
E_USER_ERROR Visar användargenererade fel, dvs. anpassad felhanterare felrapportering (E_ USER_ERROR);
E_USER_WARNING Visar användargenererade varningsmeddelanden felrapportering (E_USER_WARNING);
E_USER_NOTICE Visar användargenererade meddelanden felrapportering (E_USER_NOTICE);
E_RECOVERABLE_ERROR Visar fel som inte är dödliga och kan hanteras med anpassade felhanterare felrapportering (E_RECOVERABLE_ERROR);
E_ALL Visar alla fel och varningar felrapportering (E_ ALL);

Skillnad mellan fel och undantag

  • Undantag kastas och är avsedda att fångas medan fel i allmänhet inte går att återställa.
  • Undantag hanteras på ett objektorienterat sätt.

    Detta betyder när ett undantag kastas; ett undantagsobjekt skapas som innehåller undantagsdetaljer.

Tabellen nedan visar undantagsobjektmetoderna

Metod Beskrivning Exempel
getMessage () Visar undantagets meddelande
getMessage();?>
hämta kod() Visar den numeriska koden som representerar undantaget
getCode();?>
Få fil() Visar filnamnet och sökvägen där undantaget inträffade
getFile();?>
getLine () Visar radnumret där undantaget inträffade
getLine();?>
getTrace () Visar en matris av bakspåret före undantaget
getTrace());?>
getPrevious () Visar föregående undantag före det aktuella
getPrevious();?>
getTraceAsString () Visar undantagets spårning som en sträng i stället för en matris
getTraceAsString();?>
__att stränga() Visar hela undantaget som en sträng
__toString();?>

Nedan är den grundläggande syntaxen för att kasta ett undantag.

HÄR,

  • "Kast" är det nyckelord som används för att kasta undantaget
  • "New Exception (...)" skapar ett undantagsobjekt och skickar "This is a exception example" -sträng som meddelandeparameter.

Ovanstående kod matar ut följande meddelande.

Vi ska nu titta på ett exempel som implementerar undantag för kast och fångst.

Vi kommer att ändra exemplet ovan och inkludera försök, kast och fånga.

Den har följande grundläggande syntax.

HÄR,

  • "Försök {...}" är det kodblock som ska köras som potentiellt kan leda till ett undantag
  • “Catch (Exception $ e) {…}” är kodblocket som fångar det kastade undantaget och tilldelar undantagsobjektet till variabeln $ e.

Koden nedan visar det grundläggande undantagsexemplet med undantaget försök, kast och fångst implementerat.

Programmet kastar medvetet ett undantag som det sedan fångar.

getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>

Öppna webbadressen http: //localhost/phptuts/exception_handling.php Du får följande resultat.

Det är också möjligt att skapa flera undantag för ett php-försök, beroende på vilken typ av undantag som kastas.

Se artikeln om MySQL, PHP-datatillgång

... för exempel på implementering av flera undantag

Flera undantag

Flera undantag använder flera fångstblock för att hantera de kastade undantagen. Flera undantag är användbara när;

  • Du vill visa ett anpassat meddelande beroende på undantaget som kastas
  • Du vill utföra en unik operation beroende på undantaget som kastas

Flödesschemat nedan illustrerar hur flera undantag fungerar

Låt oss titta på ett exempel som använder flera undantag.

Vi kommer att modifiera koden som delar ett nummer med passerat i nämnaren.

Vi förväntar oss två typer av undantag;

  • Dividera med noll
  • Uppdelning med ett negativt tal

För enkelhetens skull visar vi endast undantagstypen i våra fångstblock.

Den inbyggda PHP-klassen används för att kasta undantag.

Vi skapar två klasser som utökar undantagsklassen och använder dem för att kasta undantag.

Koden nedan visar implementeringen.

Testar koden

Vi antar att du har sparat multiple_exceptions.php i phptuts-mappen.

Bläddra till webbadressen http: //localhost/phptuts/multiple_exceptions.php

Byt tillbaka till PHP-filen och skicka -1 som parameter som visas i följande diagram.

Bläddra till webbadressen http: //localhost/phptuts/multiple_exceptions.php .

Vilka resultat får du? Skicka 3 som parameter.

Vilka resultat får du?

Sammanfattning

  • Fel är oväntade resultat som produceras av PHP-kod
  • Felhantering förbättrar applikationsprestandan
  • PHP har inbyggda funktioner som kan användas för att anpassa hur PHP rapporterar fel
  • Undantag är som fel, men de kan fångas med hjälp av fångsten när de kastas.
  • Att visa felmeddelanden som visar felinformation anses vara en dålig säkerhetspraxis.