[PHP] try-catch... klappt nicht

glowhand

Programmierer
21 April 2006
273
16
Hallo!
Habe hier ein ganz einfaches Code-Beispiel, was mir grad Ärger bereitet:

PHP:
<?php
# Hauptklasse, die alle weiteren Funktionen im Script bedient 
class Core 
{
	function showError($i) 
	{
  	try 
		{
			$result = 6/0;
		}
		catch (Exception $e)
		{
			echo 'Fehler: durch 0 geteilt.<br />'.$e;	
		}
	}
}

$core = new Core();
$core->showError(0);
?>

Es geht darum, dass PHP die Standard-Fehlermeldung ausgibt:
Warning: Division by zero in C:\xampp\htdocs\opinion\bla.php on line 9
anstatt eben
"Fehler: durch 0 geteilt."...


Kurze Frage: Warum und was mache ich falsch?
 
Könnte was damit zu tun haben das Catch nur Errors auffängt und bei einer Warning noch nicht anschlägt.
 
php 5.2.1

@ vorposter:
ja aber die wichtigsten fehler, wie zb wenn eine datei nicht gefunden wird, oder man keine datenbankverbindung aufbauen kann, sind auch "nur" warnings.... und grade für sowas ist dieses exceptions-gelumps in php imo da...
 
naja da viele eher mit 4.xx arbeiten und es auch ncoh welche geben soll mit noch älteren versionen ist das doch recht neu oder? Neu ist hier nicht gerade Zeitlich sondern versionsgebunden zu sehen ;)
 
hm, also in der regel sollte try/catch nur objekte fangen. warnings sind vielleicht keine :)

hab da im php umfeld bisher nix gemacht. aber folgende seite bringt das passende beispiel:
https://de.php.net/exceptions

PHP:
try {
  set_error_handler(create_function('', "throw new Exception(); return true;"));

  ...code...

} catch(Exception $e) {

}

man beachte hier: www.php.net/set_error_handler
 
naja das mit dem set_error_handler find ich hässlich^^
trozdem danke.
habe herausgefunden, dass man im try-block immer throw verwenden muss... 8O
 
naja das mit dem set_error_handler find ich hässlich^^
trozdem danke.
habe herausgefunden, dass man im try-block immer throw verwenden muss... 8O

Try-catch kann nur Exceptions abfangen und PHP Fehler sind ebend keine Exceptions. Vielleicht ändert sich das in zukunft, aber zurzeit sind das zwei paar Schuh.
 
also macht das zur zeit nicht wirklich sinn, wenn der großteil der fehler (für mich sind das alles fehler) nicht erkannt wird ...!?
 
steht für PHP6 zur Diskussion, die sind sich da aber im mom noch groß am zoffen^^

Ja ich weiß, aber eigentlich wäre das ein logischer Schritt. In anderen Sprachen werden solche sachen auch als Exception behandelt. Und es ist doch auch für den Programmierer besser. Zurzeit muss sich der Programmierer mit zwei verschiedenen Error-Handlings rumschlagen, das find ich einfach nur rückständig. Das ist so wie gewollt aber nicht gekonnt...
 
Ja ich weiß, aber eigentlich wäre das ein logischer Schritt. In anderen Sprachen werden solche sachen auch als Exception behandelt. Und es ist doch auch für den Programmierer besser. Zurzeit muss sich der Programmierer mit zwei verschiedenen Error-Handlings rumschlagen, das find ich einfach nur rückständig. Das ist so wie gewollt aber nicht gekonnt...

ja, die PHP-Developer haben eben bei Java und Co. abgeschaut aber nicht genug Zeit gehabt in allen Packages die Fehlerroutinen zu ändern, damit nun wirklich überall Exceptions geworfen werden, man sehe sich nur mal an, wielange die mitlerweile an der Unicode-Unterstützung von PHP6 arbeiten...
Aber du hast Recht, so wie es im moment ist, kann es nicht bleiben, und da mit ext/mysqli schon der Schritt in Richtung Exceptions getan wurde, wird es denke ich auch bald für alle Packages umgesetzt.