login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP5] throw en catches

Offline Stijn - 14/08/2006 20:25 (laatste wijziging 14/08/2006 20:30)
Avatar van StijnPHP expert hallo

Ik was bezig met een script aan het veranderen en wilde een PHP5 error geven. Nu met PHP5 gebruiken we try{}catch(){}.

zo werkt de code wel:
  1. <?php
  2. $i = 0;
  3.  
  4. try {
  5.  
  6. if( $i != 1 ) {
  7. throw new Exception('error');
  8. }
  9.  
  10. }
  11. catch (Exception $e)
  12. {
  13. die( $e->getMessage() );
  14. }
  15.  
  16. echo "sleep";
  17.  
  18.  
  19. ?>


maar ik herinnerde me nog iets van zend dat hij zonder try{} block een error kon gooien ik ben eens verder gaan zien en zie dat Zend_Exception gewoon een extend is van de class Exception. Nu dacht ik: ik ga hetzelfde doen als Zend's framework maar dat werkt niet.

  1. <?php
  2.  
  3. class OSF_exception extends Exception { }
  4.  
  5. $i = 0;
  6.  
  7. if( $i != 1 ) {
  8. throw new OSF_exception('error');
  9. }
  10.  
  11. echo "sleep";
  12.  
  13.  
  14. ?>


ik krijg deze error van Zend studio:
Citaat:
Debug Error: D:wampwwwtest2.php line 8 - Uncaught exception 'OSF_exception' with message 'error' in D:wampwwwtest2.php:8
Stack trace:
#0 D:Program FilesZendZendStudio-5.2.0binphp5dummy.php(1): include()
#1 {main}
thrown


Kan iemand vertellen waarom dit wel werkt van Zend en niet van ik?

bedankt stijn

[edit]

wanneer ik er een catch blok eronder zet dan geeft hij syntac error weer bij de catch dus dat werkt ook niet.... ik snap niet hoe die van Zend dat doen 

ps: dit zijn test scriptjes , dus als je dacht dat ik daaraan aan werken was...  

5 antwoorden

Gesponsorde links
Offline Button - 14/08/2006 20:39 (laatste wijziging 14/08/2006 23:16)
Avatar van Button PHP ver gevorderde
  1. <?php
  2.  
  3. class OSF_exception extends Exception {
  4. function __construct($message) {//deze constructie is aangeraden
  5. parent::Exception($message);
  6.  
  7. }
  8.  
  9. try {
  10.  
  11. trow new OSF_exception('blabla');
  12.  
  13. } catch(OSF_exception $ex) {
  14. // Let op: hier heb ik nog iets geëdit->ik was $ex vergeten
  15.  
  16. $fout=($ex->getMessage());
  17.  
  18. }
  19.  
  20. ?>


dit is niet zonder een try block maar wel een eigen exceptionclass die extends van Exception
Offline Stijn - 14/08/2006 21:13
Avatar van Stijn PHP expert ja dat wist ik al... maar dat is niet wat ik bedoel.
Offline jensen - 14/08/2006 22:20
Avatar van jensen Nieuw lid Je moet een exception die gegooid wordt altijd ergens opvangen. De zend exception moet ook ergens worden opgevangen. Dat hoeft niet noodzakelijk in dezelfde klasse te gebeuren.

Een voorbeeld:
  1. <?php
  2. class MySQLException extends Exception {
  3. public $backtrace;
  4.  
  5. public function __construct($message = false, $code = false) {
  6. if (!$message) {
  7. $this->message = mysql_error();
  8. }
  9. if (!$code) {
  10. $this->code = mysql_errno();
  11. }
  12. $this->backtrace = debug_backtrace();
  13. }
  14.  
  15. public function __destruct() {}
  16. }
  17.  
  18. class MySQL {
  19. public function connect() {
  20. $this->dbh = mysql_connect($this->hostname, $this->username, $this->password);
  21. if (!is_resource($this->dbh)) {
  22. throw new MySQLException; // Gooien van de exception.
  23. }
  24. if (!mysql_select_db($this->database, $this->dbh)) {
  25. throw new MySQLException;
  26. }
  27. }
  28. }
  29.  
  30. try {
  31. $mysql = new MySQL();
  32. $mysql->connect();
  33. } catch (Exception $e) {
  34. print_r($e);
  35. }
  36. ?>
Offline Stijn - 14/08/2006 22:24
Avatar van Stijn PHP expert ok , bedankt. ik zal eens zien waar zend deze opvangt
Offline nemesiskoen - 27/08/2006 17:41 (laatste wijziging 27/08/2006 17:41)
Avatar van nemesiskoen Gouden medaille

PHP expert
Zend vangt deze nergens op offcourse. Ze worden gegooid, en het is de bedoeling dat jij deze opvangt in je code. Zend gooit maar vangt niet; dat is jouw werk.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.23s