Co je to výjimka?
Chyba je neočekávaný výsledek programu, který sám program nezvládne.
Chyby jsou vyřešeny opravou programu. Příkladem chyby by byla nekonečná smyčka, která se nikdy nezastaví.
Výjimkou je neočekávaný výsledek programu, který lze zpracovat samotným programem.
Mezi příklady výjimek patří pokus o otevření souboru, který neexistuje.
Tuto výjimku lze vyřešit buď vytvořením souboru, nebo nabídnutím možnosti vyhledávání souboru uživateli.
V tomto výukovém programu se naučíte
- Proč zpracovávat výjimky?
- Zpracování chyb PHP
- Příklady zpracování chyb
- Rozdíl mezi chybami a výjimkou
- Několik výjimek
- Testování kódu
Proč zpracovávat výjimky?
- Vyhněte se neočekávaným výsledkům na našich stránkách, které mohou být pro naše koncové uživatele velmi nepříjemné nebo dráždivé
- Zlepšete zabezpečení našich aplikací tím, že nevystavujete informace, které mohou uživatelé se zlými úmysly použít k útoku na naše aplikace
- Výjimky Php se používají ke změně normálního toku programu, pokud dojde k jakékoli předvídatelné chybě.
Zpracování chyb PHP
Dojde-li k chybě, v závislosti na vašem nastavení konfigurace zobrazí PHP ve webovém prohlížeči chybovou zprávu s informacemi o chybě, ke které došlo.
PHP nabízí řadu způsobů řešení chyb.
Podíváme se na tři (3) běžně používané metody;
- Příkazy Die - funkce Die kombinuje funkci echo a exit v jednom. Je to velmi užitečné, když chceme odeslat zprávu a zastavit spuštění skriptu, když dojde k chybě.
- Vlastní obslužné rutiny chyb - jedná se o uživatelem definované funkce, které se volají vždy, když dojde k chybě.
- Hlášení chyb PHP - chybová zpráva v závislosti na vašem nastavení hlášení chyb PHP. Tato metoda je velmi užitečná ve vývojovém prostředí, když nemáte tušení, co způsobilo chybu. Zobrazené informace vám mohou pomoci při ladění aplikace.
Příklady zpracování chyb
Podívejme se nyní na několik jednoduchých příkladů s rutinami zpracování chyb.
Předpokládejme, že jsme vyvinuli aplikaci, která k ukládání dat používá textové soubory. Možná bychom chtěli zkontrolovat existenci souboru, než se z něj pokusíme načíst data.
Níže uvedený kód implementuje výše uvedený příklad.
Za předpokladu, že jste uložili soubor simple_error.php do složky phptuts, otevřete URL http: //localhost/phptuts/simple_error.php
Získáte následující výsledky
Jak vidíte z výše uvedených výsledků, naše aplikace vypadá neprofesionálně a může být pro uživatele nepříjemná.
Upravíme výše uvedený kód a napíšeme obslužnou rutinu chyby pro aplikaci
Za předpokladu, že jste uložili výše uvedený kód jako error_handling.php, otevřete URL http: //localhost/phptuts/error_handling.php
Poznámka: Je dobrým bezpečnostním postupem zobrazovat zprávu jako ta, která je uvedena výše, místo zobrazení zprávy jako „Soubor nebyl nalezen“.
Podívejme se na další příklad, který používá vlastní obslužný program chyb.
Vlastní obslužná rutina chyb bude nastavena jako výchozí funkce zpracování chyb PHP a bude v zásadě zobrazovat číslo chyby a zprávu.
Níže uvedený kód ilustruje implementaci výše uvedeného příkladu
Otevřete URL http: //localhost/phptuts/custom_error_handler.php získáte následující výsledky
.
Jak můžete vidět z výše uvedeného příkladu, vlastní obslužné rutiny chyb jsou účinné v tom smyslu
- Umožňují nám přizpůsobit chybové zprávy.
- Vlastní obslužná rutina chyb může také zahrnovat protokolování chyb v souboru / databázi, zasílání e-mailů vývojářům atd.
Pojďme se nyní podívat na třetí typ zpracování chyb. Budeme používat funkci PHP zabudovanou ve funkci error_reporting. Má následující základní syntaxi
TADY,
- „Error_reporting“ je funkce hlášení chyb PHP
- „$ Reporting_level“ je volitelný, lze jej použít k nastavení úrovně hlášení. Pokud nebyla zadána žádná úroveň hlášení, použije PHP výchozí úroveň hlášení chyb uvedenou v souboru php.ini.
Úroveň hlášení | Popis | Příklad |
---|---|---|
VAROVÁNÍ | Zobrazuje pouze varovné zprávy. Nezastaví provádění skriptu | error_reporting (E_WARNING); |
E_NOTICE | Zobrazuje upozornění, která mohou nastat během normálního spuštění programu nebo mohou představovat chybu. | error_reporting (E_ NOTICE); |
E_USER_ERROR | Zobrazí chyby generované uživatelem, tj. Vlastní obslužný program chyb | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Zobrazuje varovné zprávy generované uživatelem | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Zobrazuje upozornění generovaná uživateli | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Zobrazí chybu, která není fatální a lze ji zpracovat pomocí vlastních obslužných rutin chyb | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Zobrazí všechny chyby a varování | error_reporting (E_ ALL); |
Rozdíl mezi chybami a výjimkou
- Výjimky jsou vyvolány a mají být zachyceny, zatímco chyby jsou obecně neopravitelné.
-
Výjimky jsou zpracovávány objektově orientovaným způsobem.
To znamená, když je vyvolána výjimka; je vytvořen objekt výjimky, který obsahuje podrobnosti o výjimce.
Níže uvedená tabulka ukazuje metody objektu výjimky
Metoda | Popis | Příklad |
---|---|---|
getMessage () | Zobrazí zprávu o výjimce |
getMessage();?> |
získat kód() | Zobrazí číselný kód, který představuje výjimku |
getCode();?> |
getFile () | Zobrazí název souboru a cestu, kde došlo k výjimce |
getFile();?> |
getLine () | Zobrazí číslo řádku, kde došlo k výjimce |
getLine();?> |
getTrace () | Zobrazí pole zpětného sledování před výjimkou |
getTrace());?> |
getPrevious () | Zobrazí předchozí výjimku před aktuální |
getPrevious();?> |
getTraceAsString () | Zobrazí backtrace výjimky jako řetězec namísto pole |
getTraceAsString();?> |
__toString () | Zobrazí celou výjimku jako řetězec |
__toString();?> |
Níže je uvedena základní syntaxe pro vyvolání výjimky.
TADY,
- „Throw“ je klíčové slovo použité k vyvolání výjimky
- „Nová výjimka (…)“ vytvoří objekt výjimky a předá řetězec „Toto je příklad výjimky“ jako parametr zprávy.
Výše uvedený kód vydává následující zprávu.
Nyní se podíváme na příklad, který implementuje výjimky throw a catch.
Výše uvedený příklad upravíme a zahrneme pokus, hod a chycení.
Má následující základní syntaxi.
TADY,
- „Try {…}“ je blok kódu, který má být spuštěn a který by mohl potenciálně vyvolat výjimku
- „Catch (Exception $ e) {…}“ je blok kódu, který zachytí vyvolanou výjimku a přiřadí objekt výjimky proměnné $ e.
Níže uvedený kód ukazuje příklad základní výjimky s implementovanou výjimkou try, throw a catch.
Program záměrně vyvolá výjimku, kterou pak zachytí.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Otevřete URL http: //localhost/phptuts/exception_handling.php Získáte následující výsledky.
Je také možné vytvořit více výjimek pro jeden příkaz php try v závislosti na typu vyvolané výjimky.
Přečtěte si článek o přístupu k datům MySQL, PHP
… Pro příklady implementace několika výjimekNěkolik výjimek
Vícenásobná výjimka slouží ke zpracování vyvolaných výjimek pomocí více bloků try catch. Několik výjimek je užitečné, když;
- Chcete zobrazit přizpůsobenou zprávu v závislosti na vyvolané výjimce
- Chcete provést jedinečnou operaci v závislosti na vyvolané výjimce
Vývojový diagram níže ukazuje, jak funguje několik výjimek
Podívejme se na příklad, který používá několik výjimek.
Upravíme kód, který vydělí číslo předaným ve jmenovateli.
Očekáváme, že nastanou dva typy výjimek;
- Dělení nulou
- Dělení záporným číslem
Kvůli zjednodušení zobrazíme typ výjimky pouze v našich blocích úlovků.
PHP zabudované do třídy Exception se používá k vyvolání výjimek.
Vytvoříme dvě třídy, které rozšíří třídu výjimek a použijí je k vyvolání výjimek.
Níže uvedený kód ukazuje implementaci.
Testování kódu
Předpokládáme, že jste uložili soubor multiple_exceptions.php do složky phptuts.
Přejděte na adresu URL http: //localhost/phptuts/multiple_exceptions.php
Přepněte zpět na soubor PHP a předejte -1 jako parametr, jak je znázorněno v následujícím diagramu.
Přejděte na adresu URL http: //localhost/phptuts/multiple_exceptions.php .
Jaké výsledky získáte? Předejte 3 jako parametr.
Jaké výsledky získáte?
souhrn
- Chyby jsou neočekávané výsledky produkované kódem PHP
- Zpracování chyb zlepšuje výkon aplikace
- PHP má zabudované funkce, které lze použít k přizpůsobení způsobu, jakým PHP hlásí chyby
- Výjimky jsou jako chyby, ale při vyvolání je lze zachytit pomocí bloku catch.
- Zobrazování chybových zpráv, které zobrazují informace o chybě, se považuje za špatný postup zabezpečení.