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;
- 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.
- Anpassade felhanterare - dessa är användardefinierade funktioner som anropas när ett fel inträffar.
- 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 undantagFlera 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.