Mi az a kivétel?
A hiba egy váratlan programeredmény, amelyet maga a program nem tud kezelni.
A hibákat a program javításával oldják meg. A hibára példa lehet egy végtelen ciklus, amely soha nem hagyja abba a végrehajtást.
Kivételt képez a váratlan programeredmény, amelyet maga a program kezelhet.
Példák a következőkre: nem létező fájl megnyitása.
Ez a kivétel kezelhető úgy, hogy létrehozza a fájlt, vagy felajánlja a felhasználónak a fájl keresésének lehetőségét.
Ebben az oktatóanyagban megtanulja-
- Miért kell kezelni a kivételt?
- PHP hibakezelés
- Hiba a példák kezelésében
- Különbség a hibák és a kivétel között
- Több kivétel
- A kód tesztelése
Miért kell kezelni a kivételt?
- Kerülje az olyan váratlan eredményeket az oldalakon, amelyek nagyon idegesítőek vagy irritálóak lehetnek a végfelhasználók számára
- Javítsa alkalmazásaink biztonságát azáltal, hogy nem tárja fel azokat az információkat, amelyeket a rosszindulatú felhasználók felhasználhatnak az alkalmazások megtámadására
- A Php kivételek a program normál folyamatának megváltoztatására szolgálnak, ha bármilyen kiszámítható hiba lép fel.
PHP hibakezelés
Ha hiba lép fel, a konfigurációs beállításoktól függően a PHP megjeleníti a hibaüzenetet a webböngészőben, a hibával kapcsolatos információkkal.
A PHP számos lehetőséget kínál a hibák kezelésére.
Három (3) általánosan használt módszert vizsgálunk meg;
- Die utasítások - a die függvény egyesíti az echo és a exit funkciót. Nagyon hasznos, ha üzenetet akarunk kiadni és hiba esetén le akarjuk állítani a parancsfájl végrehajtását.
- Egyéni hibakezelők - ezek a felhasználó által definiált függvények, amelyeket hiba esetén hívnak meg.
- PHP hibajelentés - a hibaüzenet a PHP hibajelentési beállításaitól függ. Ez a módszer nagyon hasznos a fejlesztői környezetben, amikor még nem tudja, mi okozta a hibát. A megjelenített információk segíthetnek az alkalmazás hibakeresésében.
Hiba a példák kezelésében
Most nézzünk meg néhány egyszerű példát a hibakezelési rutinokkal.
Tegyük fel, hogy kifejlesztettünk egy alkalmazást, amely szöveges fájlokat használ az adatok tárolására. Érdemes ellenőriznünk a fájl létezését, mielőtt megpróbálnánk adatokat olvasni belőle.
Az alábbi kód a fenti példát valósítja meg.
Feltéve, hogy a simple_error.php fájlt a phptuts mappába mentette, nyissa meg az URL címet : http: //localhost/phptuts/simple_error.php
A következő eredményeket kapja
Amint a fenti eredményekből látható, az alkalmazásunk szakszerűtlennek tűnik, és bosszantó lehet a felhasználó számára.
Módosítjuk a fenti kódot, és írunk egy hibakezelőt az alkalmazáshoz
Feltéve, hogy a fenti kódot error_handling.php fájlként mentette, nyissa meg az URL címet : http: //localhost/phptuts/error_handling.php
Megjegyzés: jó biztonsági gyakorlat, ha egy üzenetet a fentiek szerint jelenít meg, ahelyett, hogy a „Fájl nem található” üzenetet jelenítené meg.
Nézzünk meg egy másik példát, amely egyedi hibakezelőt használ.
Az egyéni hibakezelő alapértelmezett PHP hibakezelő funkcióként lesz beállítva, és alapvetően hibaszámot és üzenetet jelenít meg.
Az alábbi kód szemlélteti a fenti példa megvalósítását
Nyissa meg az URL címet : http: //localhost/phptuts/custom_error_handler.php a következő eredményeket kapja
.
Amint a fenti példából látható, az egyéni hibakezelők ebben az értelemben nagy teljesítményűek
- Lehetővé teszik a hibaüzenetek testreszabását.
- Az egyéni hibakezelő tartalmazhat hibanaplózást egy fájlba / adatbázisba, e-mailt a fejlesztőnek stb.
Most nézzük meg a harmadik típusú hibakezelést. A beépített PHP-ben a hiba_jelentés funkciót fogjuk használni. A következő alapvető szintaxissal rendelkezik
ITT,
- A „error_reporting” a PHP hibajelentési funkció
- A „$ report_level” opcionális, használható a jelentési szint beállítására. Ha nincs megadva jelentési szint, akkor a PHP az alapértelmezett hibajelentési szintet használja, amint az a php.ini fájlban meg van határozva.
Jelentési szint | Leírás | Példa |
---|---|---|
FIGYELEM | Csak figyelmeztető üzeneteket jelenít meg. Nem állítja le a szkript végrehajtását | hibajelentés (E-FIGYELMEZTETÉS); |
E_NOTICE | Megjelenítéseket jelenít meg, amelyek előfordulhatnak a program normál végrehajtása során, vagy hibák lehetnek. | hibajelentés (E_ ÉRTESÍTÉS); |
E_USER_ERROR | Megjeleníti a felhasználó által generált hibákat, azaz az egyedi hibakezelőket | hibajelentés (E_ USER_ERROR); |
E_USER_WARNING | Megjeleníti a felhasználó által generált figyelmeztető üzeneteket | hibajelentés (E_USER_WARNING); |
E_USER_NOTICE | A felhasználó által generált értesítéseket jeleníti meg | hibajelentés (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Olyan hibákat jelenít meg, amelyek nem végzetesek és egyedi hibakezelőkkel kezelhetők | hibajelentés (E_RECOVERABLE_ERROR); |
E_ALL | Minden hibát és figyelmeztetést megjelenít | hibajelentés (E_ ALL); |
Különbség a hibák és a kivétel között
- A kivételeket el kell dobni, és meg akarják fogni, míg a hibákat általában nem lehet helyrehozni.
-
A kivételeket objektum-orientált módon kezeljük.
Ez azt jelenti, ha kivételt vetnek; létrehoz egy kivétel objektumot, amely tartalmazza a kivétel részleteit.
Az alábbi táblázat a kivételobjektum-módszereket mutatja be
Módszer | Leírás | Példa |
---|---|---|
getMessage () | Megjeleníti a kivétel üzenetét |
getMessage();?> |
megkapni a kódot() | Megjeleníti a kivételt képviselő numerikus kódot |
getCode();?> |
getFile () | Megjeleníti a fájl nevét és elérési útját, ahol a kivétel történt |
getFile();?> |
getLine () | Megjeleníti a sor számát, ahol a kivétel történt |
getLine();?> |
getTrace () | A kivétel előtti tömböt jeleníti meg |
getTrace());?> |
getPrevious () | Megjeleníti az előző kivételt az aktuális előtt |
getPrevious();?> |
getTraceAsString () | Tömb helyett karakterláncként jeleníti meg a kivétel visszamenőleges nyomát |
getTraceAsString();?> |
__toString () | A teljes kivételt stringként jeleníti meg |
__toString();?> |
Az alábbiakban bemutatjuk a kivétel dobásának alapvető szintaxisát.
ITT,
- A „dobás” az a kulcsszó, amelyet a kivétel eldobására használnak
- Az „new Exception (…)” kivételobjektumot hoz létre, és az „Ez egy kivételes példa” karakterláncot adja át üzenetparaméterként.
A fenti kód a következő üzenetet adja ki.
Most egy olyan példát fogunk megvizsgálni, amely a dobás és elkapás kivételeket valósítja meg.
Módosítjuk a fenti példát, és belefoglaljuk a próbálkozást, a dobást és a fogást.
A következő alapvető szintaxissal rendelkezik.
ITT,
- A „try {…}” a végrehajtandó kód blokkja, amely kivételt jelenthet
- A „catch (Exception $ e) {…}” az a kódblokk, amely befogja a dobott kivételt, és a kivétel objektumot hozzárendeli az $ e változóhoz.
Az alábbi kód bemutatja az alapvető kiviteli példát a try, dobás és elkapás kivétellel.
A program szándékosan vet egy kivételt, amelyet aztán elkap.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Nyissa meg az URL címet : http: //localhost/phptuts/exception_handling.php A következő eredményeket kapja.
Lehetőség van több kivétel létrehozására is egy php try utasításhoz, a dobott kivétel típusától függően.
Lásd a MySQL, PHP adatelérés című cikket
… A kivételek megvalósítási példáihozTöbb kivétel
Több kivétel esetén használjon több próbálkozási blokkot a dobott kivételek kezeléséhez. Több kivétel akkor hasznos, ha;
- Testreszabott üzenetet szeretne megjeleníteni a dobott kivétel függvényében
- Egyedi műveletet szeretne végrehajtani a dobott kivétel függvényében
Az alábbi folyamatábra szemlélteti a több kivétel működését
Nézzünk meg egy példát, amely több kivételt használ.
Módosítjuk azt a kódot, amely elosztja a számot az átadott nevezővel.
Kétféle kivétel előfordulására számítunk;
- Osztás nullával
- Osztás negatív számmal
Az egyszerűség kedvéért csak a kivétel típusát jelenítjük meg a fogási blokkjainkban.
A Kivétel osztályba épített PHP a kivételeket dobja.
Létrehozunk két osztályt, amelyek kibővítik a kivétel osztályt, és felhasználják őket a kivételek megdobására.
Az alábbi kód a megvalósítást mutatja.
A kód tesztelése
Feltételezzük, hogy a multiple_exceptions.php fájlt a phptuts mappába mentette.
Keresse meg az URL címet : http: //localhost/phptuts/multiple_exceptions.php
Váltson vissza a PHP fájlra, és adja meg a -1 értéket paraméterként az alábbi ábra szerint.
Keresse meg a http: //localhost/phptuts/multiple_exceptions.php URL-t .
Milyen eredményeket ér el? Adja meg a 3. paramétert.
Milyen eredményeket ér el?
Összegzés
- A hibák a PHP-kód által előállított váratlan eredmények
- A hibakezelés javítja az alkalmazás teljesítményét
- A PHP beépített funkciókat tartalmaz, amelyek testreszabhatók a PHP hibabejelentésének módjában
- A kivételek olyanok, mint a hibák, de dobáskor megfoghatók a fogási blokk használatával.
- A hibainformációkat megjelenítő hibaüzenetek rossz biztonsági gyakorlatnak minősülnek.