php5: throw exception

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php5: throw exception

    hi!

    ist es eigentlich normal, dass zusätzlich zum werfen einer exception ein E_WARNING geworfen wird?

    schematisches beispiel:

    if function($param) {
    // statement
    } else {
    throw SomeException
    }

    function kann beispielsweise durch copy() u.ä. ersetzt werden.

  • #2
    was sagt denn das warning?

    Kommentar


    • #3
      was sagt denn das warning?
      na, dass die datei nicht gefunden wurde, wie im testfall beabsichtigt. die warning wird geworfen obwohl eine eigene exception geworfen wird. ein beispiel:
      PHP-Code:
      <?php
      try {
          if (!
      copy("foo.bar""/")) {
              throw new 
      Exception("description");
          }
      } catch (
      Exception $e) {
          echo 
      "exception caught!";
      }
      ?>
      liefert:
      Warning: copy(foo.bar) [function.copy]: failed to open stream: No such file or directory in [...] on line 3
      exception caught!
      Zuletzt geändert von php_rookie; 20.01.2005, 18:08.

      Kommentar


      • #4
        warum kein file_exists davor?

        Kommentar


        • #5
          weil es eine fehlermeldung auslösen SOLL. das nämlich ist mein problem. warum wird eine E_WARNING ausgelöst wo die meldung doch von einer exception abgefangen werden sollte?

          Kommentar


          • #6
            hab zwar wenig erfahrung mit php5, aber ich meine der block try {} wird zunächst ganz normal ausgeführt. und wenn darin etwas ne warning schmeißt, dann wird's so sein. deine exception ändert nichts an der "normalen" ausführung des ersten blocks, afaik.

            wenn du so ein warning nicht anders behandeln willst, kannst du ein user_warning (oder wie das heißt) anlegen.

            copy ist nun mal ein befehl, der nur eine bestehende datei kopiert. file_exists fänd ich eine schönere lösung, als das warning mit einem @-operator zu schlucken.

            ändere den block doch so:
            PHP-Code:
            try {
              if(
            file_exists("bla")){
                
            copy(/*bla*/);
              } else
                 throw 
            exception //etc...
            }
            catch ... 
            //etc... 

            Kommentar


            • #7
              Original geschrieben von penizillin
              hab zwar wenig erfahrung mit php5, aber ich meine der block try {} wird zunächst ganz normal ausgeführt. und wenn darin etwas ne warning schmeißt, dann wird's so sein. deine exception ändert nichts an der "normalen" ausführung des ersten blocks, afaik.
              Das ist so richtig!

              Du solltest wenn zuerst ein file-exists machen und bei dessen Fehlschlag die Fehlermeldung ausgeben. Try/Catch ist nicht dazu da um unsaubere Programmierung auszubessern, sondern um die Fehlerbehandlung zu verbessern!

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar

              Lädt...
              X