Čo je to výnimka?
Chyba je neočakávaný výsledok programu, ktorý samotný program nedokáže spracovať.
Chyby sa vyriešia opravením programu. Príkladom chyby by mohla byť nekonečná slučka, ktorá sa nikdy neprestane vykonávať.
Výnimkou je neočakávaný výsledok programu, ktorý zvládne samotný program.
Medzi príklady výnimiek patrí pokus o otvorenie súboru, ktorý neexistuje.
Túto výnimku je možné vyriešiť vytvorením súboru alebo poskytnutím možnosti vyhľadať súbor používateľovi.
V tomto návode sa naučíte
- Prečo vybavovať výnimky?
- Spracovanie chýb PHP
- Príklady spracovania chýb
- Rozdiel medzi chybami a výnimkou
- Viaceré výnimky
- Testovanie kódu
Prečo vybavovať výnimky?
- Zabráňte neočakávaným výsledkom na našich stránkach, ktoré môžu byť pre našich koncových používateľov veľmi nepríjemné alebo dráždivé
- Zlepšite bezpečnosť našich aplikácií tým, že neodhaľujete informácie, ktoré môžu používatelia so zlým úmyslom použiť na napadnutie našich aplikácií
- Výnimky Php sa používajú na zmenu normálneho toku programu, ak dôjde k akejkoľvek predvídateľnej chybe.
Spracovanie chýb PHP
Ak sa vyskytne chyba, v závislosti na vašom konfiguračnom nastavení zobrazí PHP chybové hlásenie vo webovom prehliadači s informáciami o chybe, ktorá sa vyskytla.
PHP ponúka množstvo spôsobov riešenia chýb.
Pozrime sa na tri (3) bežne používané metódy;
- Príkazy die - funkcia die kombinuje funkciu echo a exit v jednom. Je to veľmi užitočné, keď chceme odoslať správu a zastaviť vykonávanie skriptu, keď sa vyskytne chyba.
- Vlastné obslužné rutiny chýb - sú to užívateľom definované funkcie, ktoré sa volajú vždy, keď sa vyskytne chyba.
- Hlásenie chýb PHP - chybové hlásenie v závislosti od vašich nastavení hlásenia chýb PHP. Táto metóda je veľmi užitočná vo vývojovom prostredí, keď nemáte tušenie, čo spôsobilo chybu. Zobrazené informácie vám môžu pomôcť pri ladení vašej aplikácie.
Príklady spracovania chýb
Pozrime sa teraz na niekoľko jednoduchých príkladov s rutinami spracovania chýb.
Predpokladajme, že sme vyvinuli aplikáciu, ktorá na ukladanie údajov používa textové súbory. Možno by sme mali skontrolovať existenciu súboru skôr, ako sa z neho pokúsime načítať údaje.
Nasledujúci kód implementuje vyššie uvedený príklad.
Za predpokladu, že ste uložili súbor simple_error.php do priečinka phptuts, otvorte URL http: //localhost/phptuts/simple_error.php
Získate nasledujúce výsledky
Ako môžete vidieť z vyššie uvedených výsledkov, robí našu aplikáciu neprofesionálnou a môže byť pre používateľa nepríjemná.
Vyššie uvedený kód upravíme a pre aplikáciu napíšeme obslužný program chýb
Za predpokladu, že ste uložili vyššie uvedený kód ako error_handling.php, otvorte URL http: //localhost/phptuts/error_handling.php
Poznámka: Dobrým bezpečnostným postupom je zobraziť správu tak, ako je uvedená vyššie, namiesto toho, aby sa správa zobrazovala ako „Súbor sa nenašiel“.
Pozrime sa na ďalší príklad, ktorý používa vlastný obslužný program chýb.
Vlastný obslužný program chýb bude nastavený ako predvolená funkcia spracovania chýb PHP a v zásade bude zobrazovať číslo chyby a správu.
Nasledujúci kód ilustruje implementáciu vyššie uvedeného príkladu
Otvorte URL http: //localhost/phptuts/custom_error_handler.php získate nasledujúce výsledky
.
Ako vidíte z vyššie uvedeného príkladu, vlastné obslužné rutiny chýb sú účinné v tom zmysle
- Umožňujú nám prispôsobiť chybové správy.
- Vlastný obslužný program chýb môže obsahovať aj protokolovanie chýb do súborov / databáz, odosielanie e-mailov vývojárom atď.
Pozrime sa teraz na tretí typ spracovania chýb. Budeme používať zabudovanú funkciu PHP error_reporting. Má nasledujúcu základnú syntax
TU,
- “Error_reporting” je funkcia hlásenia chýb PHP
- „$ Reporting_level“ je voliteľný, je možné ho použiť na nastavenie úrovne hlásenia. Ak nebola zadaná žiadna úroveň hlásenia, použije PHP predvolenú úroveň hlásenia chýb uvedenú v súbore php.ini.
Úroveň prehľadu | Popis | Príklad |
---|---|---|
VAROVANIE | Zobrazuje iba varovné správy. Nezastavuje vykonávanie skriptu | error_reporting (E_WARNING); |
E_NOTICE | Zobrazuje oznámenia, ktoré sa môžu vyskytnúť počas normálneho vykonávania programu alebo môžu predstavovať chybu. | error_reporting (E_ NOTICE); |
E_USER_ERROR | Zobrazuje chyby generované používateľom, tj vlastný obslužný program chýb | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Zobrazuje varovné správy generované používateľom | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Zobrazuje oznámenia generované používateľom | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Zobrazuje chyby, ktoré nie sú fatálne a dajú sa vyriešiť pomocou vlastných spracovávačov chýb | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Zobrazuje všetky chyby a varovania | error_reporting (E_ ALL); |
Rozdiel medzi chybami a výnimkou
- Vyvolávajú sa výnimky, ktoré sa majú chytiť, zatiaľ čo chyby sú spravidla neopraviteľné.
-
Výnimky sú riešené objektovo orientovaným spôsobom.
To znamená, keď je vyvolaná výnimka; vytvorí sa objekt výnimky, ktorý obsahuje podrobnosti o výnimke.
Nasledujúca tabuľka zobrazuje metódy objektov výnimiek
Metóda | Popis | Príklad |
---|---|---|
getMessage () | Zobrazí správu o výnimke |
getMessage();?> |
získať kód() | Zobrazí číselný kód, ktorý predstavuje výnimku |
getCode();?> |
getFile () | Zobrazí názov súboru a cestu, kde sa vyskytla výnimka |
getFile();?> |
getLine () | Zobrazí číslo riadku, kde sa vyskytla výnimka |
getLine();?> |
getTrace () | Zobrazí pole spätného sledovania pred výnimkou |
getTrace());?> |
getPrevious () | Zobrazí predchádzajúcu výnimku pred aktuálnou |
getPrevious();?> |
getTraceAsString () | Zobrazí spätný chod výnimky ako reťazec namiesto poľa |
getTraceAsString();?> |
__natiahnuť() | Celú výnimku zobrazí ako reťazec |
__toString();?> |
Nižšie je uvedená základná syntax pre udelenie výnimky.
TU,
- „Throw“ je kľúčové slovo použité na vyvolanie výnimky
- „Nová výnimka (...)“ vytvorí objekt výnimky a ako parameter správy odovzdá reťazec „Toto je príklad výnimky“.
Vyššie uvedený kód vydáva nasledujúcu správu.
Teraz sa pozrieme na príklad, ktorý implementuje výnimky hodu a úlovku.
Vyššie uvedený príklad upravíme a zahrnieme pokus, hod a chytenie.
Má nasledujúcu základnú syntax.
TU,
- „Try {...}“ je blok kódu, ktorý sa má vykonať a ktorý by mohol potenciálne vyvolať výnimku
- „Catch (Výnimka $ e) {...}“ je blok kódu, ktorý zachytí vyvolanú výnimku a priradí objekt výnimky k premennej $ e.
Nasledujúci kód zobrazuje príklad základnej výnimky s implementovanou výnimkou pokusu, hodenia a chytenia.
Program zámerne hodí výnimku, ktorú potom chytí.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Otvorte URL http: //localhost/phptuts/exception_handling.php Získate nasledujúce výsledky.
Je tiež možné vytvoriť viac výnimiek pre jeden príkaz php try v závislosti od typu vyvolanej výnimky.
Prečítajte si článok o prístupe k údajom MySQL, PHP
… Pre príklady implementácie viacerých výnimiekViaceré výnimky
Viaceré výnimky používajú na spracovanie vyhodených výnimiek viac blokov try catch. Viaceré výnimky sú užitočné, keď;
- Chcete zobraziť prispôsobenú správu v závislosti od vyvolanej výnimky
- Chcete vykonať jedinečnú operáciu v závislosti od vyvolanej výnimky
Vývojový diagram uvedený nižšie ukazuje, ako funguje niekoľko výnimiek
Pozrime sa na príklad, ktorý používa viac výnimiek.
Upravíme kód, ktorý vydelí číslo číslom odovzdaným v menovateli.
Očakávame, že nastanú dva typy výnimiek;
- Delenie nulou
- Delenie záporným číslom
Kvôli jednoduchosti zobrazíme typ výnimky iba v našich blokoch úlovkov.
Na zabudovanie výnimiek sa používa PHP zabudované v triede Exception.
Vytvoríme dve triedy, ktoré rozšíria triedu výnimiek a použijú ich na vyvolanie výnimiek.
Nasledujúci kód zobrazuje implementáciu.
Testovanie kódu
Budeme predpokladať, že ste uložili súbor multiple_exceptions.php do priečinka phptuts.
Prejdite na adresu URL http: //localhost/phptuts/multiple_exceptions.php
Prepnite späť na súbor PHP a odovzdajte -1 ako parameter, ako je znázornené na nasledujúcom diagrame.
Prejdite na adresu URL http: //localhost/phptuts/multiple_exceptions.php .
Aké výsledky dosahujete? Zadajte 3 ako parameter.
Aké výsledky dosahujete?
Zhrnutie
- Chyby sú neočakávané výsledky produkované kódom PHP
- Spracovanie chýb zlepšuje výkon aplikácie
- PHP má zabudované funkcie, ktoré možno použiť na prispôsobenie spôsobu, akým PHP hlási chyby
- Výnimky sú ako chyby, ale dajú sa zachytiť pomocou bloku catch, keď sú vyhodené.
- Zobrazenie chybových správ, ktoré zobrazujú informácie o chybe, sa považuje za zlý bezpečnostný postup.