tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
9446
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Quadaptor Quadaptor ist offline Rookie
    Registriert seit
    Jun 2003
    Ort
    Frankfurt
    Beiträge
    7
    Hallo,

    seit ein paar Tagen beschäftige ich mich mit der 3. Beta Version von PHP 5.

    Es hieß ja u.a. auch, dass das Exception Handling wie in Java geben sollen. Leider kommt mir es so vor, als werfen die PHP-Funktionen keine internen Exception?!

    Z.b. bringt folgender Code nur einen typischen PHP-Fehler (failed to open stream: No such file or directory in ...):

    PHP-Code:
    try {
        include(
    "datei.php");
    } catch (
    exception $e) {
        echo 
    $e->getMessage();

    In Java würde an dieser Stelle z.B. eine FileNotFoundException geworfen werden.

    Sehe ich das richtig oder gibt es eine Möglichkeit interne Exception abzufangen, etc.?!

    Natürlich gibt es die Möglichkeit per If-Clausel "throw Exception" aufzurufen, was meiner Meinung nach allerdings nicht sehr viel bringt. So könnte ich theoretisch auch nur mit if() und else() arbeiten.

    Gruß,
    Dennis
     

  2. #2
    Avatar von mowl
    mowl mowl ist offline Mitglied Silber
    Registriert seit
    Jan 2004
    Ort
    Altenburg
    Beiträge
    96
    PHP-Code:
    <?php
    try { 
        throw include(
    "datei.php"); 
    } catch (
    exception $e) { 
        echo 
    $e->getMessage(); 
    }
    ?>
    In Java würde an dieser Stelle z.B. eine FileNotFoundException geworfen werden.
    Die Klasse "exception" muss vorhanden sein um einen Fehler auszugeben.

    Unter php.net ist alles wunderbar erklärt : http://www.php.net/zend-engine-2.php
     
    cheers,

  3. #3
    Quadaptor Quadaptor ist offline Rookie
    Registriert seit
    Jun 2003
    Ort
    Frankfurt
    Beiträge
    7
    Danke für die schnelle Antwort, aber ich glaube du hast mich falsch verstanden:

    Ich möchte keine eigenen Exceptions schreiben und somit ist auch exception() im Code-Bespiel nicht vorhanden. In Java muss man ja z.B. auch keine NullPointerException, etc. selber schreiben.

    Es geht eigentlich darum, ob PHP-Funktionen eigene Exception werfen können!

    Dennis
     

  4. #4
    Avatar von mowl
    mowl mowl ist offline Mitglied Silber
    Registriert seit
    Jan 2004
    Ort
    Altenburg
    Beiträge
    96
    Nein geht nicht, des weiteren solltest du beachten das PHP kein Java ist und auch nicht werden wird!
     
    cheers,

  5. #5
    Unksi Tutorials.de Gastzugang
    Ich poste in den alten thread weil man ihn bei google unter "php error handling" weit oben findet.

    Exception ist eine Klasse die im PHP Core ist, also kann man die auch benutzen, nur triggered include/require keine Exception sondern einen Error. Dh kann man den Fehler nur mit set_error_handler(function ($code,$str,$file,$line,$context){ //handle error }); einfangen, nicht mit try/catch.
    Andere Möglichkeit wäre if((include "datei.php") != "OK") echo "Error loading file 'datei.php'"; .

    Generell funktioniert das Error Handling in PHP >5 sehr gut, wenn man die bereitgestellen Klassen und Funktionen richtig nützt, trotzdem ist ein eigener Error & Exception Handler schnell angebracht um immer sauber formatierte Fehlermeldungen für den Benutzer zu gewähleisten.

    Hierzu:
    http://www.php.net/manual/en/ref.errorfunc.php
    http://www.php.net/manual/en/class.exception.php

    Die Exceptionklasse stellt viele der errorfunctions als Methoden bereit:

    PHP-Code:
    try {
    $dblink = new PDO("mysql:host='host';dbname='db'",$user,$pass,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING));
    }
    catch(
    Exception $err) {
    echo 
    $err->getTrace(); // Backtrace, das selbe wie debug_backtrace();
    echo $err->getMessage(); // Fehlermeldung
    echo $err->getCode(); // Fehlercode
    echo $err->getFile(); // Datei in welcher der Fehler auftrat
    echo $err->getLine(); // Zeile...

    Vielleicht hilfts ja nochmal wem, konnt den mist von mowl da nur nicht so stehen lassen.
     

  6. #6
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Zitat Zitat von Unksi Beitrag anzeigen
    Andere Möglichkeit wäre if((include "datei.php") != "OK") echo "Error loading file 'datei.php'"; .
    Kleine Ergänzung zu dieser Variante:
    Zu diesem Beispiel gehört natürlich dazu, dass man das error_reporting() auf 0 stellt, damit PHPs Fehlermeldungen auch unterdrückt. Dies sollte eigentlich auf jedem Produktivsystem so sein, aber ich dachte ich erwähn es nochmal

    Dringend sollte man die Benutzung des @ Operator vermeiden. Dieser unterdrückt zwar die Fehlermeldung, aber macht auch das Finden von Fehlern sehr schwer... Im obigen Beispiel ist es eine Funktion deren Parameter man kurz ändern, im anderen Fall sind es mal eben 200 @-Zeichen die man entfernen muss um den Fehler zu finden...
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

Ähnliche Themen

  1. Exception Handling in C#
    Von mafin im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 26.01.09, 22:11
  2. Email Exception Handling
    Von Tekkion im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 29.05.08, 08:22
  3. Exception Handling - Wie vorgehen
    Von y0dA im Forum Java
    Antworten: 8
    Letzter Beitrag: 21.01.08, 12:51
  4. Exception-Handling
    Von naeko im Forum Java
    Antworten: 3
    Letzter Beitrag: 19.04.07, 23:06
  5. exception handling in c++
    Von ciMbOmFrEaK im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 17.03.03, 17:49