Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyjatki - obsluga
Forum PHP.pl > Forum > PHP > Object-oriented programming
snipe
Testuje ostatnio sobie php5 i mam pytanie zwiazane z wyjatkami. Zrobilem cos takiego:

  1. <?
  2. class system
  3. {
  4. function db_connect($server, $user, $password, $dbname)
  5. {
  6. try
  7. {
  8. if(@!mysql_connect($server, $user, $password))
  9. throw new Exception('',1);
  10. if(@!mysql_select_db($dbname))
  11. throw new Exception('',2);
  12.  
  13. }
  14.  
  15. catch(Exception $e)
  16. {
  17. if($e->getCode()==1)
  18. echo 'Nie mozna bylo polaczyc sie z hostem';
  19. if($e->getCode()==2)
  20. echo 'Nie mozna bylo polaczyc sie z baza danych';
  21. }
  22. }
  23. }
  24. $system = &new system;
  25. $system->db_connect('localhost', 'user', 'password', 'baza');
  26. ?>


Jak mozna to lepiej rozwiazac, chodzi mi o obsluge wyjatkow questionmark.gif
dr_bonzo
Wyrzuc wyjatek poza metode db_connect(), bo gdy nie bedziesz sie mogl polaczyc klient (kod programu: $system->db_connect('l....) nie bedzie o tym wiedzial, a info o tym ze nie polaczyles sie bedzie wyrzucone na ekran niewiadomo w ktorym miejscu szablonu.

Wewnatrz db_connect() mozesz wyrzucac wyjatki, ale wyrzuc tez poza nia gdy polaczenie sie nie powiodlo.

Tu masz maly moj przyklad obslugi wyjatkow http://northslope.lap.pl/dev/wyjatki.phps (kod moze sie nie uruchomic i raczej nie powinien, patrz tylko na wyjatki)
snipe
czyli z tego wynika ze nie oplaca sie lapac wyjatkow w metodzie?? smile.gif
dr_bonzo
Wszystko zalezy jakie to wyjatki i co oznaczaja.
W twoim przypadku wyrzuc wyjatek poza metode.

  1. <?php
  2. $system = &new system;
  3. $system->db_connect('localhost', 'user', 'password', 'baza'); // no i sie nioe udalo polaczyc
  4.  
  5. i skad bedziesz TUTAJ wiedzial czy sie polaczyles?
  6.  
  7. ?>


  1. <?php
  2.  
  3. try
  4. {
  5. $system = &new system;
  6. $system->db_connect('localhost', 'user', 'password', 'baza');
  7. // a tu prowadzisz dalej operacje na bazie danych, query, fetch_* itd.
  8. }
  9. catch ( Exception $e )
  10. {
  11. print( 'cos sie popsulo biggrin.gif' . $e->getMessage() );
  12. }
  13.  
  14. ?>


To jest bardzo duze uproszczenie, mozna zagniezdzac bloki try/catch, itd.
Gdzies na forum jest watek o wyjatkach, powinno byc tam wiecej info.
snipe
ok, dzieki biggrin.gif
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.