login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP]Exception

Offline Esli - 30/01/2010 11:49 (laatste wijziging 30/01/2010 11:51)
Avatar van EsliPHP interesse Hallo,

Er is me iets niet 100% duidelijk bij exceptions. Ik wil eigenlijk allemaal mijn errors-stap voor stap maken en dan allemaal gaan uitspuwen.

Ik wil iets bereiken als:
  1. <?php
  2. if(1!=2)
  3. {
  4. $error = '1 is nog steeds niet gelijk aan 2';
  5. }
  6. if(2!=3)
  7. {
  8. $error .= '<br/>2is nog steeds niet gelijk aan 3';
  9. }
  10.  
  11. echo $error;
  12. //Hier komen al de foutjes dus te staan
  13. ?>


Nu wil ik het zo niet doen, maar netjes met Exceptions, iets als volgt dus:
  1. <?php
  2. try
  3. {
  4. if(1!=2)
  5. {
  6. throw new Exception('1 is nog steeds niet gelijk aan 2');
  7. }
  8. if(2!=3)
  9. {
  10. throw new Exception('2 is nog steeds niet gelijk aan 3');
  11. }
  12. }
  13. catch(Exception $e)
  14. {
  15. echo $e->getMessage();
  16. //Hier zou ik dan ALLE errors wensen
  17. }
  18. ?>


Ik krijg jammer genoeg enkel de eerste error terug. Nu ik weet ook wel dat het als volgt op te lossen valt:
  1. <?php
  2. try
  3. {
  4. if(1!=2)
  5. {
  6. throw new Exception('1 is nog steeds niet gelijk aan 2');
  7. }
  8. }
  9. catch(Exception $e)
  10. {
  11. echo $e->getMessage();
  12. //Ouput indien er een error is
  13. }
  14. try {
  15. if(2!=3)
  16. {
  17. throw new Exception('2 is nog steeds niet gelijk aan 3');
  18. }
  19. }
  20. catch(Exception $e)
  21. {
  22. echo '<br/>' . $e->getMessage() . "\n";
  23. //nog een output indien er een error is
  24. }
  25. ?>


Oké, dit kan ik wel toepassen, maar stel dat ik allemaal cheks doe op een inlogform. (Is de gebruikersnaam ingevuld? Bevat die minimaal zo veel tekens? Bevat die maximaal zo veel tekens? Bevat hij geen ongeldige tekens? Is het wachtwoord...)
Dan zou ik al heel wat try-catches moeten hebben. Ik hoop dat mijn punt (probleem) een beetje duidelijk is.

4 antwoorden

Gesponsorde links
Offline Abbas - 30/01/2010 13:58 (laatste wijziging 30/01/2010 14:01)
Avatar van Abbas Gouden medaille

Crew .NET
Helemaal niet waar wat je zegt. Het is heel normaal dat je in je eerste voorbeeld alleen maar de eerste terug krijgt, vanaf dat er een Exception is wordt de catch aangeroepen. Je kan het misschien anders proberen:

  1. $exMessage = "";
  2. try
  3. {
  4. if(empty($_POST["naam"]))
  5. $exMessage .= "- Naam invullen";
  6. if(empty($_POST["paswoord"]))
  7. $exMessage .= "- Paswoord invullen";
  8. //Nog andere dingen ook
  9.  
  10. if(!empty($exMessage))
  11. throw new Exception($exMessage);
  12. }
  13. catch(Exception $e)
  14. {
  15. echo $e->getMessage();
  16. }

Of je kan ook je eigen Exceptions gaan schrijven! 
Offline Esli - 30/01/2010 14:08
Avatar van Esli PHP interesse
titjes schreef:
Helemaal niet waar wat je zegt. Het is heel normaal dat je in je eerste voorbeeld alleen maar de eerste terug krijgt, vanaf dat er een Exception is wordt de catch aangeroepen. Je kan het misschien anders proberen:

[..code..]
Of je kan ook je eigen Exceptions gaan schrijven! 


Ik zou het inderdaad zo kunnen oplossen. Wat jij bedoelt met zelf schrijven, is dat de klaase uitbreiden wat je bedoelt?
Offline Abbas - 30/01/2010 14:13
Avatar van Abbas Gouden medaille

Crew .NET
Een klasse maken die overerft van de klasse Exception e! 
Offline Esli - 30/01/2010 22:14
Avatar van Esli PHP interesse Ik heb de class als volgt uitgebreid:

  1. <?php
  2. /* Error reporting aanzetten */
  3. ini_set('display_errors', 'On');
  4.  
  5. class Error extends Exception
  6. {
  7. public function getError()
  8. {
  9. /* Strings maken */
  10. $sError = '';
  11. $sCode = '';
  12.  
  13. /* Unserializen */
  14. $aError = unserialize($this->message);
  15.  
  16. /* Verwerken van de error */
  17. if(!is_array($aError))
  18. {
  19. $sError = $aError;
  20. return $sError;
  21. }
  22. else
  23. {
  24. foreach($aError as $key => $bericht)
  25. {
  26. $tijdelijke_opslag[$key] = $bericht;
  27. }
  28.  
  29. /* Keys & values in apparte array steken */
  30. $keys = array_keys($tijdelijke_opslag);
  31. $values = array_values($tijdelijke_opslag);
  32.  
  33. /* De keys worden voor verdere werking gebruikt --> niet voor bezoeker */
  34.  
  35. $sMededeling = '';
  36. foreach($values as $sError)
  37. {
  38. $sMededeling .= $sError . '<br />' . "\n";
  39. }
  40. return $sMededeling;
  41. }
  42.  
  43. }
  44.  
  45. }
  46. ?>


en dat kan je dan testen als volgt:

  1. <?php
  2. require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/error.class.php');
  3.  
  4. if(2==2)
  5. {
  6. $aError[2] = 'Boeiend';
  7. }
  8.  
  9. if(2!=5)
  10. {
  11. $aError[7] = 'Twee is al helemaal niet gelijk aan 5';
  12. }
  13. if(2==2)
  14. {
  15. $aError[3] = 'Twee is gelijk aan twee!';
  16. }
  17.  
  18. try
  19. {
  20. throw new Error(serialize($aError));
  21. }
  22. catch(Error $e)
  23. {
  24. echo $e->getError();
  25. }
  26. ?>


Wat denken jullie hier van?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.217s