Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kiedy używać wyjątków?
zbig13
post
Post #1





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

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


Witam!

Jestem w trakcie tworzenia obiektowego skryptu w php5. Zacząłem od własnego sterownika bazy danych. Napisałem taki kod:

  1. <?php
  2.  
  3. class DBMySQL
  4. {
  5.  
  6. private static $dbcon;
  7. private static $dbhandle;
  8. private static $query;
  9. private static $liczbaZapytan;
  10. private static $queryResult;
  11. private static $temp;
  12.  
  13. public function __construct()
  14. {
  15. self::$zapytan = 0;
  16. self::$dbcon = FALSE;
  17. }
  18.  
  19. public static function connect($host, $user, $pswd)
  20. {
  21. self::$dbcon = @mysql_connect($host, $user, $pswd);
  22. if (!self::$dbcon) {
  23. throw new Exception('Nie udało się połączyć z bazą danych.');
  24. }
  25. return self::$dbcon;
  26. }
  27.  
  28. public static function selectDb($dbname)
  29. {
  30. self::$dbhandle = @mysql_select_db($dbname);
  31. if (!self::$dbhandle) {
  32. throw new Exception('Nie udało się wybrać bazy.');
  33. }
  34. return self::$dbhandle;
  35. }
  36.  
  37. public static function query($query)
  38. {
  39. self::$liczbaZapytan++;
  40. self::$query = $query;
  41. return mysql_query(self::$query);
  42. }
  43.  
  44. public static function fetchArray($result)
  45. {
  46. self::$queryResult = $result;
  47. self::$temp = mysql_fetch_array(self::$queryResult);
  48. return self::$temp;
  49. }
  50.  
  51. public static function numRows($result)
  52. {
  53. self::$queryResult = $result;
  54. return mysql_num_rows(self::$queryResult);
  55. }
  56.  
  57. public static function realEscapeString($string)
  58. {
  59. return mysql_real_escape_string($string, self::$dbcon);
  60. }
  61.  
  62. public static function startTransaction()
  63. {
  64. self::query('BEGIN');
  65. }
  66.  
  67. public static function acceptTransaction()
  68. {
  69. self::query('COMMIT');
  70. }
  71.  
  72. public static function rollbackTransaction()
  73. {
  74. self::query('ROLLBACK');
  75. }
  76.  
  77. public static function returnQueries()
  78. {
  79. return $liczbaZapytan;
  80. }
  81.  
  82. }
  83.  
  84. ?>


W dwóch sytuacjach użyłem rzucania wyjątków w przypadku błedu (łączenie z bazą i wybieranie bazy). Chciałem też dać obsługe wyjątków do innych funkcji, np. query(), ale jakoś nie wyobrażam sobie później takiego wykonywania zapytań:
  1. <?php
  2. try {
  3. DBMySQL::query("SELECT * FROM tabela");
  4. } catch (Exception $e) {
  5. echo $e->getmessage();
  6. }
  7. ?>

Jest jakiś sposób na rzucanie wyjątków, żeby nie trzeba było ich później za każdym razem obsługiwać w kodzie? I czy warto rzucać wyjątki w przypadku takiej funkcji jak query(), lub numRows()?

Ten post edytował zbig13 27.03.2006, 07:56:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Vengeance @ 2006-03-28 20:42:59)
Cytat

Bo jak sprawdzam w metodzie, to cały skrypt mam objęty instrukcją try...catch i jak wystąpi jeden wyjątek to cały skrypt zostanie zatrzymany, a głupio trochę zatrzymać cały system jak tylko jedno zapytanie się nie powiedzie.


Jak sama nazwa wskazuje, wyjątek służy do informowania o sytuacjach wyjątkowych, czyli takich po wystąpieniu których aplikacja musi być wstrzymana (ewentualnie jakiś blok operacji w aplikacji).

Dlatego stwierdzenie, że "trochę głupio jest zatrzymać system" jest samo w sobie bardzo głupie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Chyba rozumiesz?

~Vengeance mylisz się.
Wyjątek jest to nagła styuacja, na którą trzeba zareagować.

A przerwanie działania systemu/aplikacji to najgorsza reakcja.

Nie można sobie (a przynajmniej nie powinno) zatrzymać działania w fowolnej chwili bo wyskoczył jakiś wyjątek, no właśnie po to wyskoczył żeby nam powiedzieć że musimy zrobić coś inaczej niż planowaliśmy.

To zależy od natury wyjątku, ale powinniśmy ładnie dalej poprowadzić aplikacją na tory boczne, które zaprowadzą użytkownika do ładnego ekranu powiadamiającym go o błędzie. Wcześniej możemy wykonać wiele operacji: logować wyjątek, wysyłać maila do admina, ... .

Kill process to bardzo zły wybór.
Go to the top of the page
+Quote Post

Posty w temacie
- zbig13   Kiedy używać wyjątków?   26.03.2006, 16:38:17
- - Prph   Nie rozumiem, dlaczego query to zle miejsce na wyj...   26.03.2006, 17:08:43
- - zbig13   Nie rozumiem tych Twoich przykładów. Mi chodzi po ...   26.03.2006, 17:24:52
- - dr_bonzo   CytatA wolałbym prościej: .... przeciez i tak bed...   26.03.2006, 17:39:17
- - zbig13   Ok juz rozumiem. Dzięki za pomoc   26.03.2006, 17:56:55
- - SongoQ   Dorzuc tam transakcjem, logowanie czasow zapytania...   26.03.2006, 19:37:32
- - zbig13   Mam jeszcze jedno pytanie w związku z tym rzucanie...   27.03.2006, 06:32:40
- - SongoQ   CytatA co to są transakcje? W google znajdziesz. D...   27.03.2006, 07:52:03
- - zbig13   Ok, już dodałem (kod w moim pierwszym poście) tylk...   27.03.2006, 07:59:09
- - Prph   Jest bardzo wiele sytuacji w ktorzych korzystasz z...   27.03.2006, 08:19:13
- - zbig13   No dobra przekonałeś mnie A co do tej funkcji qu...   27.03.2006, 08:43:45
- - SongoQ   Mozesz ewentualnie zrobic cos w rodzaju debug zapy...   27.03.2006, 08:52:27
- - Vengeance   CytatBo jak sprawdzam w metodzie, to cały skrypt m...   28.03.2006, 20:42:59
- - zbig13   Tak rozumiem, dlatego zrezygnowałem z wyjątków w f...   29.03.2006, 06:38:09
- - mike_mech   Cytat(Vengeance @ 2006-03-28 20:42:59)Cytat B...   29.03.2006, 09:04:10
- - SongoQ   CytatTo zależy od natury wyjątku, ale powinniśmy ł...   29.03.2006, 09:10:38
- - zbig13   To konkretnie jak lepiej robić? : - Tam gdzie to m...   29.03.2006, 14:18:11
- - Vengeance   mike_mech: Chodziło mi raczej oto, że stosowanie w...   29.03.2006, 14:22:43
- - DeyV   @ Vengeance - ale już w przypadku system::create...   29.03.2006, 18:32:40
- - Vengeance   Ale czy ja mówię, że wyjątki są złe? Przykłady któ...   29.03.2006, 19:27:50
- - g00fy   pozatym dobrze sobie zawsze ustawiać zmienna czy f...   4.04.2006, 16:15:05
- - Prph   Cytat(g00fy @ 2006-04-04 15:15:05)pozatym dob...   5.04.2006, 09:43:23
- - SongoQ   Autorowi chyba chodzilo o tryb pracy czy z z wyjat...   5.04.2006, 10:50:32


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: 9.10.2025 - 10:39