login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Try/Catch blokken

Offline Ultimatum - 22/10/2007 13:52 (laatste wijziging 22/10/2007 13:54)
Avatar van UltimatumPHP expert Ik heb 2 functies waarin ik een error gooi wanneer het fout gaat. Maar moet ik als ik de 2 functies achter elkaar gebruik, ook 2 try/catch blokken gebruiken of kan het in 1. Zie code voor duidelijkheid, heb sommige dingen er wel uitgesloopt omdat ze niet efficient zijn. (Dit is ook meer een test, dus als ik nog wat fout doe )

  1. <?php
  2. public function query($sql) {
  3.  
  4. if(!$query = mysql_query($sql)) {
  5.  
  6. throw new Exception('Mysql Error: '. mysql_error());
  7.  
  8. } else {
  9.  
  10. return $query;
  11.  
  12. }
  13. }
  14.  
  15. public function fetch($sql) {
  16.  
  17. if(!$query = mysql_fetch_array($sql)) {
  18.  
  19. throw new Exception('Er was een error tijdens het fetchen van een query');
  20.  
  21. } else {
  22.  
  23. return $query;
  24.  
  25. }
  26. }
  27. #################[ Try/Catch]################
  28. ## moet het dan zo?
  29. try {
  30.  
  31. $select = $this->db->query("SELECT student_goedgekeurd
  32. FROM studenten
  33. WHERE student_gebruikersnaam = '". $gebruikersnaam ."'
  34. AND student_wachtwoord = '". $wachtwoord ."'");
  35.  
  36. $arr = $this->db->fetch($select);
  37.  
  38. print_r($arr);
  39.  
  40. } catch(Exception $e) {
  41.  
  42. echo $e->getMessage();
  43.  
  44. }
  45.  
  46. ## of zo?
  47.  
  48. try {
  49.  
  50. $arr = $this->db->query("SELECT student_goedgekeurd
  51. FROM studenten
  52. WHERE student_gebruikersnaam = '". $gebruikersnaam ."'
  53. AND student_wachtwoord = '". $wachtwoord ."'");
  54.  
  55. try {
  56.  
  57. $arr = $this->db->fetch($select);
  58.  
  59. print_r($arr);
  60.  
  61. } catch(Exception $e) {
  62.  
  63. echo $e->getMessage();
  64.  
  65. }
  66. } catch(Exception $e) {
  67.  
  68. echo $e->getMessage();
  69.  
  70. }


Alvast bedankt..

5 antwoorden

Gesponsorde links
Offline marten - 22/10/2007 15:02
Avatar van marten Beheerder Ik zou in ieder geval in een functie de echo niet gebruiken maar return. Verder kan alles in 1 try blok.
Offline Ultimatum - 22/10/2007 15:50
Avatar van Ultimatum PHP expert Hoe bedoel je? Ik gebruik geen echo in de functie? Of bedoel je de echo om de error te laten zien?
Offline Stijn - 22/10/2007 18:00
Avatar van Stijn PHP expert Alles kan in 1 try block gebeuren. Je kan wel meerdere catch blokken gebruiken als je dat wenst. Stel dat je een nieuwe Exception class maakt (zie bv volgend code fragment).

  1. class MysqlException extends Exception{}


als je nu in je functie fetch ipv Exception, MysqlException gooit dan moet je gebruik maken van 2 catch blokken en ziet je try...catch... er als volgt uit:

  1. try {
  2. $select = $this->db->query("SELECT student_goedgekeurd
  3. FROM studenten
  4. WHERE student_gebruikersnaam = '". $gebruikersnaam ."'
  5. AND student_wachtwoord = '". $wachtwoord ."'");
  6.  
  7. $arr = $this->db->fetch($select);
  8.  
  9. print_r($arr);
  10. }
  11. catch( Exception $e )
  12. {
  13. echo $e->getMessage();
  14. }
  15. catch( MysqlException $m )
  16. {
  17. echo $m->getMessage();
  18. }


Dit is gewoon wat nuttige randinformatie.
Offline Wim - 22/10/2007 21:05
Avatar van Wim Crew algemeen moet je niet eerst je mysqlexception opvangen aangezien dit een "onderdeel" van exception is?
Offline Stijn - 23/10/2007 00:44
Avatar van Stijn PHP expert Exception is een onderdeel van MysqlException. Als je een mysqlexception gooit zal de juiste catch blok dit opvangen hoor.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.231s