Vomit
25.01.2006, 11:38:26
Mam kilka pytan w zwiazku z obsluga bledów i wyjatkami.
Error Handler słuzy tylko do pokazania (w jakis ładny sposob bledu) czy ma jakies szersze zastosowanie? np. tworzenie logu czy powiadamianie o bledzie administratora?
Error Handler jest w pewien sposob zwiazany z wyjatkami czy sa to niezaleznie, dwie rozne od siebie sprawy? Jaka role pełni Error Handler gdy korzystamy z wyjatków (przeciez jesli bedziemy korzystac z tych dwoch rzeczy na raz otrzymamy dwie informacje o bledzie?)
Czy da sie wyrzucic wyjatek nie korzystajac z try/catch?
Sabistik
25.01.2006, 11:50:29
Cytat
Error Handler słuzy tylko do pokazania (w jakis ładny sposob bledu) czy ma jakies szersze zastosowanie? np. tworzenie logu czy powiadamianie o bledzie administratora?
jak przechwycisz blad mozesz z nim zrobic wszystko. wyslac maila, zapisac do pliku, wyslac na gg admina ;]
Vomit
25.01.2006, 12:29:30
A na inne pytania znacie odpowiedzi?
Levabul
25.01.2006, 12:36:49
Co do "Czy da sie wyrzucic wyjatek nie korzystajac z try/catch?"
Poczytaj o
set_error_handler
Vomit
25.01.2006, 12:56:26
Po przeczytanu tego moge wywnioskowac, ze da sie wyrzuc wyjatek za pomoca trigger_error() ? Nic nie bylo napisane o throw new Exception() wiec podejrzewam, ze bez try/catch throw new Exception() nie da sie?
seaquest
25.01.2006, 13:46:54
Z tego co pamiętam się da, tylko w miejscu w którym go wyrzucasz aplikacja przerywa działanie i zostaje wywułany tylko kod konstruktora tego wyjątka oraz metody __destruct() wszystkich obiektów.
Vomit
25.01.2006, 13:58:00
A to?
Cytat
Error Handler jest w pewien sposob zwiazany z wyjatkami czy sa to niezaleznie, dwie rozne od siebie sprawy? Jaka role pełni Error Handler gdy korzystamy z wyjatków (przeciez jesli bedziemy korzystac z tych dwoch rzeczy na raz otrzymamy dwie informacje o bledzie?)
_Mateo
25.01.2006, 15:07:34
Nie mozna otrzymać dwóch informacji o bledzie, bo jesli np. throw bedzie w linii 10, to odrazu przestanie wykonywac reszte z try{} i przewjdzie do catch. I na odwrot. Jesli dasz trigger error i do tego blad krytyczny wczesniej niz throw, to poprostui zakonczy caly skrypt.
A jesli w try{} uzyjesz innego komunikatu trigger_error() (np notice albo warn) to poprostu sie wyswietli komunikat, a reszta bedzie szla dalej. nie wiem czy to o to Ci chodziło, ale...
Vomit
25.01.2006, 18:45:21
Z jednej strony twoja odpowiedz mnie satysfakcjonuje, jednak moj problem polega na tym, ze nie rozumiem zaleznosci miedzy Error Handlerem i trigger_error() a Wyjatkami i try/catch.
Z tego co sam sobie moge wywnioskowac, wydaje mi sie ze nie powinno sie korzystac z wyjatkow i error handlera jednoczesnie, bo bledy i tak sa wyrzucane przez trigger_error a gdy skrypt nie zakonczy dzialania to jeszcze raz tym razem jako przechwycone przez catch?
Zreszta nie wiem za bardzo kiedy wyrzucac wyjatki ... i co do takiego wyjatki sie klasyfikuje ... czytalem o tym w manualu, ale niestety dalej mam metlikw glowie.
_Mateo
25.01.2006, 19:12:01
Mylisz teraz pojęcia. Error handler to jest funkcja obslugujaca trigger_error(). Ona przejmuje wszystkie błedy ze skryptu wyswietlajac je tak, jak okreslisz w handlerze. Pozatym ERROR_REPORTING moze miec wartosc 0, wiec wowczas nie wyswietli sie komunikat bledu. Wyjątki są uzywane do kontrolowania pracy aplikacji. Jeśli coś nie pójdzie po myśli aplikacji, to wyrzucasz wyjątek.
Vomit
25.01.2006, 20:10:29
Czyli rozumiem, ze te dwie rzeczy nie sa ze soba zwiazane w zaden sposob?
Wyjatki sa to bledy, a raczej oznaka ze jakas czynnosc zaplanowana przez programiste nie powiodla sie?
Czyli cos w stylu:
<?php
if ( !$q )
{
die('Zapytanie nie zostalo wykonane!'); // zamiast tego throw new Exception('Zapytanie nie zostalo wykonane!'); }
?>
Dobrze rozumiem?
_Mateo
25.01.2006, 21:56:12
die() nie ma nic wspolnego z tymi dwoma rzeczami. Die to tylko funkcja, ktora konczy prace skryptu. A triger_error wyrzuca błąd wyglądający z zewnątrz jak ten z php. To czy sie wyswietli zalezy od ustawienia ERROR_REPORTNIG. A wyjątki ułatwiają zarządzanie przepływem aplikacji. Jeśli np coś nie pójdzie po myśli programisty, wówczas wyrzuca się wyjątek i zakańcza prace.
Vomit
25.01.2006, 22:14:55
no wiem, ze die() nie ma z tym nic wspolnego, chodzi mi o przyklad, czy dobrze to rozumiem?
nie jestem pewien kiedy wywoływac wyjatki:
i pytam czy wyjatki wyrzuca sie np. w takiej sytuacji:
<?php
if ( !$q )
{
throw new Exception('Zapytanie nie zostalo wykonane!');
}
?>
_Mateo
25.01.2006, 22:28:34
Cos takiego. Tylko pamiętaj, że throw mozesz tylko dac w try{}. Jak w try{} wystapi wyjatek, to mozesz z nim zrobic wszystko w bloku catch.
Rafiki
26.05.2006, 14:42:00
Mam pytanie, czy znacie moze jakis art ktory obszernie w calosci traktuje o wyjatkach i obludze bledow, gdy czytam to tak wszystko czastkowo nie moge tego pojac juz jak praktycznie wykorzystac i w sumie co do czego sluzy throw new expection a error hanlder , trigiger czy inne :/
athabus
26.05.2006, 15:45:07
Artykułu nie pamiętam ale na pewno bez problemu coś w sieci da się znaleźć.
Dość przyzwoicie opisano wyjątki w tej książce:
http://helion.pl/ksiazki/phmsv3.htm jeśli mnie pamięć nie myli.
Książka jest droga ale IMHO warta swojej ceny.
NuLL
26.05.2006, 18:00:38
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.