fatal error mit selbst definiertem error_hanlder abfangen

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

  • fatal error mit selbst definiertem error_hanlder abfangen

    hi,

    folgendes script:
    PHP-Code:
    <?php
    error_reporting
    (E_ALL E_STRICT);

    class 
    Test {
        public function 
    __construct() {
            
    set_error_handler(array($this'error_handler'));   
            
    trigger_error("yx");
        }

        public function 
    error_handler($code$message$file$line) {
            echo 
    "$code$message @ $file$line";
        }
    }

    $test = new Test();
    $test->callNotDefinedFunction();
    ?>
    der getriggerte error in zeile 7 wird anstandslos vom selbst definierten error_handler übernommen, der aufruf der nicht definierten funktion in zeile 16, welcher einen fatal error erzeugt, jedoch nicht.

    woran liegt das und wie kann man ALLE fehler von einem selbst definierten error_handler abfangen lassen?

    TIA

  • #2
    schon mal an try und catch gedacht? woher soll der Parser wissen, dass er deine Klasse nehmen soll?

    Kommentar


    • #3
      PHP-Code:
      public function __call($method$a)
       {
        
      trigger_error('Method: "'.$method.'" not exists');
       } 
      wobei exceptions wohl angebrachter wären

      Kommentar


      • #4
        schon mal an try und catch gedacht?
        ja. wobei try/catch unvorhergesehene ereignisse abfangen soll, nicht programmierfehler ausbessern... der hintergrundgedanke bei obiger funktion ist es, einem user nicht mit unnötigen details zu verwirren bzw. unnötige details über den webserver preiszugeben. ich möchte prinzipiell ALLE fehler unterdrücken und in ein log-file umleiten. wenn der error_handler in obiger form aktiv ist, werden z.b. fatal-errors (wie der aufruf einer nicht existierenden funktion im beispiel oben) einfach nicht mehr angezeigt, was wohl kaum im sinne des erfinders ist.

        der error-handler soll schlussendlich in einem framework mit autoload-funktion eingesetzt werden.
        woher soll der Parser wissen, dass er deine Klasse nehmen soll?
        anhand der set_error_handler einstellung möchte man annehmen. nur wird der anscheinend erst beim ausführen aktiv, nicht schon beim parsen der datei...
        wobei exceptions wohl angebrachter wären
        getriggert wird nichts. das war nur ein beispiel um zu demonstrieren, dass der error_handler in der form (fast) funktioniert. tut er aber eben nur fast. deswegen nochmals meine frage: wie kann man ALLE fehler der typen E_ALL | E_STRICT mit einem eigenen error_handler abfangen und behandeln? oder bleibt nur der von dir beschriebene workaround?

        Kommentar

        Lädt...
        X