Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> trigger_error vs. wyjatki
NuLL
post 29.03.2005, 22:20:41
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 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 smile.gif i wyjatki wydja mi zbedne. Jakie wg. Was plusy posiadaja wyjatki nad trigger'em 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...


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
bela
post 29.03.2005, 22:41:13
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 29.03.2005, 22:53:47
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....


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
bela
post 29.03.2005, 22:58:19
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 30.03.2005, 12:34:51
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ść smile.gif' miałaby jeszcze więcej zalet.
Go to the top of the page
+Quote Post
Leezard
post 30.03.2005, 12:41:09
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


--------------------
Nie rób nic na siłę - weź większy młotek ;)
Go to the top of the page
+Quote Post
bela
post 30.03.2005, 12:51:30
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 dry.gif ).


--------------------
Go to the top of the page
+Quote Post
hawk
post 30.03.2005, 14:54:30
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 30.03.2005, 16:43:15
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()


--------------------
Com powiedział, powiedziałem.
Go to the top of the page
+Quote Post
Vengeance
post 30.03.2005, 17:16:06
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 11.04.2005, 20:59:08
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 sad.gif, żeby wszystkie funkcje wywałały wyjątki(tak bez throw tongue.gif) to by było cool cool.gif

@Imperior - handler wyjątków już podpięty smile.gif

Natomiast pomysł z finnaly jest fajny smile.gif Może w 5.1 ?


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
dr_bonzo
post 12.04.2005, 08:00:05
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.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Imperior
post 12.04.2005, 15:31:24
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.


--------------------
Com powiedział, powiedziałem.
Go to the top of the page
+Quote Post
M4chu
post 12.04.2005, 16:40:37
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 13.04.2005, 13:47:53
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:09