Výjimky a ošetřování chyb v PHP. Who is General Failure and why is he reading my disk?!

Podobné dokumenty
Z. Kotala, P. Toman: Java ( Obsah )

PB161 programování v C++ Výjimky Bezpečné programování

Připravil: David Procházka. Programovací jazyk C++

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Ošetření chyb a výjimky

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Výjimky. v C# a Javě

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

Objektově orientované programování v PHP 5. Martin Klíma

PB161 Programování v jazyce C++ Přednáška 8

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Více o konstruktorech a destruktorech

ANOTACE vytvořených/inovovaných materiálů

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

17. Projekt Trojúhelníky

Výjimky. Tomáš Pitner, upravil Marek Šabo

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Objektově orientované programování v jazyce Python

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Programování v jazyce JavaScript

Jazyk C++ II. Výjimky

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

Střední odborná škola a Střední odborné učiliště, Hořovice

Generické programování

Java - výjimky. private void vstup() throws IOException {... }

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

PŘETĚŽOVÁNÍ OPERÁTORŮ

Ošetřování chyb v programech

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

GUI. Systémová integrace pro desktopové aplikace

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

1. Od Scheme k Lispu

PB161 Programování v jazyce C++ Přednáška 9

Dědičnost (inheritance)

PB161 Programování v jazyce C++ Přednáška 9

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Objektově orientované programování v jazyce Python

Soubor jako posloupnost bytů

Chování konstruktorů a destruktorů při dědění

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Vstupní požadavky, doporučení a metodické pokyny

Sada 1 - PHP. 03. Proměnné, konstanty

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004


PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

1 Webový server, instalace PHP a MySQL 13

Funkce, podmíněný příkaz if-else, příkaz cyklu for

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Koláčky, sezení. Martin Klíma

Programování v C++ 1, 17. cvičení

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

SYSTÉM ZPRACOVÁNÍ DAT FOTOVOLTAICKÉHO SYSTÉMU A METEOSTANICE

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

PB161 Programování v jazyce C++ Přednáška 4

1. Webový server, instalace PHP a MySQL 13

Elektronická evidence tržeb v programu TRIFID

ŘÍZENÍ POHLEDÁVEK A AUTOMATICKÉ UPOMÍNKY. Katalogový doplněk ABRA Gen

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Programování II. Návrh programu II

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Programování v jazyce JavaScript

Programování v jazyce JavaScript

Skripty základy VB, vestavěné objekty, příklady

STRUČNÝ NÁVOD K POUŽITÍ

Zranitelnosti ovladačů jádra v praxi Martin Dráb martin.drab@ .cz

Databáze pro evidenci výrobků

Aplikace BSMS. Uživatelská příručka - 1 -

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

EvMO postup při instalaci

Programování v jazyce C a C++

programátorský manuál

Průvodce aplikací FS Karta

Programování v Pythonu

Ares 10/12 První spuštění

Dynamická identifikace typů v C++.

Assembler - 5.část. poslední změna této stránky: Zpět

1 Uživatelská dokumentace

4. lekce Přístup k databázi z vyššího programovacího jazyka

Popis logování v aplikačním serveru

1. Programování proti rozhraní

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D.

Konstruktory a destruktory

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

ProjectWise V8 XM Edition

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

MS Word 2007 Šablony programu MS Word

Elektronická evidence tržeb v programu TRIFID

Transkript:

Výjimky a ošetřování chyb v PHP Who is General Failure and why is he reading my disk?!

Koncept výjimek Výjimky fungují jako v jiných jazycích. Výjimka je objekt třídy Exception (nebo třídy odvozené). Výjimky se vrhají a chytají. Pomocí výjimek lze oznamovat chyby i z míst, odkud by to bylo jinak obtížné. Např. při hlubokém zanoření a složité hierarchii funkcí. Pozor na Neodchycená výjimka způsobí fatal error. Destruktory nesmí házet výjimky. Vrhání a chytání výjimek není příliš rychlé. verze 1.1 2008-2009, Martin Kruliš 2

Chytání výjimek Výjimky se chytají pomocí try-catch bloků. První vyhovující catch blok výjimku odchytí. Výběr catch bloku se provádí podle typu výjimky. try {... kod... } catch (MyException $e) {... osetreni moji vyjimky... } catch (Exception $e) {... osetreni obecne vyjimky... } verze 1.1 2008-2009, Martin Kruliš 3

Házení výjimek Výjimky se hází příkazem throw. throw new Exception('Error '); Throw může být použito i uvnitř catch bloku, aby výjimku znovu hodilo (nebo hodilo jinou výjimku). try {... } catch(myexception $e) {... castecne osetreni vyjimky... throw $e; } verze 1.1 2008-2009, Martin Kruliš 4

Tvorba tříd výjimek Každá třída výjimek musí být odvozena od Exception. Odvozené třídy nemusí předefinovat žádné metody. Pokud předefinuje konstruktor, je povinen zavolat konstruktor předka (resp. třídy Exception). Je vhodné předefinovat metodu tostring(), která se používá k výpisu výjimky. Nové třídy nevytvářejte zbytečně. Když potřebujete rozlišit jiný typ chyby. Když potřebujete do těla výjimky uložit další data (kromě chybové zprávy). verze 1.1 2008-2009, Martin Kruliš 5

Ošetřování chyb v PHP Interní chyby by se neměly zobrazovat uživateli. Uživatel neví co chyba znamená (zbytečně matoucí). Případně to může způsobit narušení bezpečnosti. Chyby je potřeba uložit někam, kde si je může přečíst programátor. PHP má operátor řízení chyb - @. Je-li předřazen nějakému výrazu, chyby v tomto výrazu budou ignorovány. Není příliš praktický, ale pro lokální řešení se hodí. $data = @file('data_file.txt') or die('error '); verze 1.1 2008-2009, Martin Kruliš 6

Chyby v PHP Chyby mají různou úroveň. Úrovně definují závažnost chyby. Např: E_ERROR Fatální chyby, které ukončí běh skriptu. E_WARNING Těžké chyby, ze kterých je možné se zotavit. E_NOTICE Neobvyklé situace (možná chyba). E_USER_NOTICE Ladící výpis. E_STRICT Oznámení PHP. Návrh na změnu v kódu apod. Je možné nastavit, které chyby se mají oznamovat a které ne. Globální nastavení je v php.ini. Lokálně je upravuje funkce error_reporting(). Uživatelské chyby lze uměle vyvolat trigger_error(). verze 1.1 2008-2009, Martin Kruliš 7

Funkce pro obsluhu chyb Chyby se dají ošetřit vlastními funkcemi. set_error_handler() nastaví callback funkci, která se použije pro ošetření libovolné chyby v PHP Handler dostane k dispozici úroveň chyby, její text a pozici ve skriptu. Pokud vrátí false, zavolá se ještě výchozí obsluha chyb. Výchozí obsluha vypíše chybu na výstup (případně ukončí skript). Výchozí obsluha se chová podle nastavené úrovně výpisu. set_exception_handler() nastaví callback funkci, která ošetřuje neodchycené výjimky Funguje obdobně jako odchytávání chyb. restore_error_handler() nastaví předchozí obsluhu chyb (před zavoláním set_error_handler()) restore_exception_handler() analogie pro obsluhu výjimek verze 1.1 2008-2009, Martin Kruliš 8

Vypisování a logování chyb Detailní informace o chybě. Občas nestačí poloha ve zdrojovém kódu, ale potřebujeme podrobnější informace - backtrace. Funkce debug_backtrace() vrací aktuální stav PHP zásobníku. Seznam volání funkcí, jejich argumenty Analogicky debug_print_backtrace() rovnou obsah zásobníku vypíše na výstup ve vhodném formátu. PHP podporuje i přímé logování chyb. Funkce error_log() posílá zprávu do logovacího systému. Logovací systém může zprávu zapsat do logu web. serveru, poslat zprávu přes TCP spojení, přes email, nebo ji zapsat do souboru. Příklad verze 1.1 2008-2009, Martin Kruliš 9