Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> trigger_error vs. wyjatki
NuLL
post
Post #1





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Hi all (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ostatnio trochę więcej czasu zacząłem poświęcać PHPv5(ale ja opóżnoiony). Wiadomo wprowadzono obslugę wyjątków. Ja od dawien dawna stosuję trigger_error któremu jako ciąg podaję zserializowaną tablicę i po wszystkim - mam fallbacki, nr linii funckje plik i co mi się rzewnie zamarzy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) i wyjatki wydja mi zbedne. Jakie wg. Was plusy posiadaja wyjatki nad trigger'em (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Po szczerze mówiąc nie chce mi się definiować miliarda wyjątków dla jakieś większej aplikacji...wole wciąż podpinać własny error_handler...
Go to the top of the page
+Quote Post
bela
post
Post #2


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


Wyjątki, jak sama nazwa wskazuje, służą do obsługi sytuacji wyjątkowych.
Czyli np, mamy sobie akcje i w pewnym momencie wystąpi jakaś nietypowa, że tak nazwijmy sytuacja, wtedy wyrzucamy wyjątek ( throw new CannotPerformException() ), a łapiemy go w ten sposób
  1. <?php
  2. try {
  3. $action->perform();
  4. } catch (CannotPerformException $cpe) {
  5. $controller->performOtherAction();
  6. } catch (Exception $e) {
  7. }
  8. ?>

Czyli,
Próbujemy wykonać akcje, jeśli nie powiedzie się to wywołujemy inną akcje (catch(Cann....)), a drugi catch służy do przechwycenia wyjątków które mogły się gdzieś zawieruszyć.

Btw gdzie się finally podziało :]
Go to the top of the page
+Quote Post
NuLL
post
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Czyli w pewnym sensie nie musze się aż tak pilnować raportowania błędów ?

Z drugiej sstrony w tym performie() ja moge zadbac o obsluge wszystkich bledów....
Go to the top of the page
+Quote Post
bela
post
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


Ja jak używałem kiedyś tego trigger_error, to traktowałem to bardziej jako narzędzie debugujące.

Wyjątki eliminują(!) wszystkie w tym momencie zbędne if/else do obsługi błędów, zmiejszają kod i pozwalają na większe ponowanie nad nim.
Go to the top of the page
+Quote Post
dasko
post
Post #5





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 9.11.2004

Ostrzeżenie: (0%)
-----


Według mnie zaletą wyjątków jest to, że od razu widać, które części kodu są do obsługi błędu, a które nie.

Poza tym definiowanie własnej klasy, dziedziczącej po klasie Exception pozwala na stworzenie specyficznego wyjatku np. dla każdego modułu. A tak to tylko 13 typów błędów wbudowanych.

Ciekawe dlaczego twórcy PHP5 nie zrobili instrukcji finally. Z takim czymś 'wyjątkowość (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ' miałaby jeszcze więcej zalet.
Go to the top of the page
+Quote Post
Leezard
post
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 19.09.2004
Skąd: Uć

Ostrzeżenie: (0%)
-----


ja swojego czasu nie moglem sie przekonac do wyjatkow zarowno w C++ jak i w JAVA, uzywalem mnostwa tych nieszczesnych if'ow.
Jednak przy budowie czegos wiekszego, a nawte nie tylko - np patrzac w czyjs kod, na oko widac co jest co, co gdzie lapiesz jesli masz ladnie wyjatki nazwane, poza tym propagacja rzuconych wyjatkow w gore, bez koniecznosci bawienia sie w zwracanie jakis dziwnych rzeczy

a w php finally faktycznie by sie przydalo

Ten post edytował Leezard 30.03.2005, 12:41:33
Go to the top of the page
+Quote Post
bela
post
Post #7


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


Cytat(Leezard @ 2005-03-30 12:41:09)
a w php finally faktycznie by sie przydalo

I jeśli będzie chęć ze strony użytkowników to najprawdopodoniej twórcy php wprowadzą finally, zgodnie z tym co mówili w wywiadzie ( któreś tam php solution, w empiku czytałem więc nie powiem (IMG:http://forum.php.pl/style_emoticons/default/dry.gif) ).
Go to the top of the page
+Quote Post
hawk
post
Post #8





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Zresztą wyjątki i trigger_error mają ze sobą mało wspólnego. Wyjątki służą do obsługi błędów, a trigger_error do logowania, debugowania i eleganckiego wywalania aplikacji.
Go to the top of the page
+Quote Post
Imperior
post
Post #9





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (0%)
-----


tak na marginesie: pamiętajcie o exception_handler()
Go to the top of the page
+Quote Post
Vengeance
post
Post #10





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Z tego co gdzieś wyczytałem, to finally było na liście TODO, ale jakiś user posłał maila, iż jest to wielce nieprzydatne i sztab php finally nie dodał.

Źródła nie podam, nie pamiętam. Może to i błędna informacja :]
Go to the top of the page
+Quote Post
NuLL
post
Post #11





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Ja np. załuje, że wyjątki w SPL i standowych funkcjach gereują tylko konstruktory (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) , żeby wszystkie funkcje wywałały wyjątki(tak bez throw (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) to by było cool (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)

@Imperior - handler wyjątków już podpięty (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Natomiast pomysł z finnaly jest fajny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Może w 5.1 ?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Chyba widzialem takie rozwiazanie na forum: error_handler wylapywal errory i wyrzucal exception.
Go to the top of the page
+Quote Post
Imperior
post
Post #13





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (0%)
-----


Wydaje mi się, że ta funkcja powinna byc gdzieś w komentarzach manuala.
Go to the top of the page
+Quote Post
M4chu
post
Post #14





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. class PHPErrorException extends Exception
  4. {
  5.  private $context = null;
  6.  public function __construct
  7.  ($code, $message, $file, $line, $context = null)
  8.  {
  9.  parent::__construct($message, $code);
  10.  $this->file = $file;
  11.  $this->line = $line;
  12.  $this->context = $context;
  13.  }
  14. };
  15.  
  16. function error_handler($code, $message, $file, $line) {
  17.  throw new PHPErrorException($code, $message, $file, $line);
  18. }
  19.  
  20. function exception_handler(Exception $e)
  21. {  
  22.  $errors = array(
  23.  E_USER_ERROR => &#092;"User Error\",
  24.  E_USER_WARNING => &#092;"User Warning\",
  25.  E_USER_NOTICE => &#092;"User Notice\",
  26.  );
  27.  
  28.  echo $errors[$e->getCode()].': '.$e->getMessage().' in '.$e->getFile().
  29.  ' on line '.$e->getLine().&#092;"n\";
  30.  echo $e->getTraceAsString();
  31. }
  32.  
  33. set_error_handler('error_handler');
  34. set_exception_handler('exception_handler');
  35.  
  36. // Throw exception with an /unkown/ error code.
  37. throw new Exception('foo', 0);
  38.  
  39. ?>
Go to the top of the page
+Quote Post
Nievinny
post
Post #15





Grupa: Zarejestrowani
Postów: 134
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Ciekawe to, muszę przetestować takie rozwiązanie, tylo czy to obsługuje błędy wywalene też przez funkcje takie jak np: set_cookie() ?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.09.2025 - 09:05