Detaillierte Einführung in Codebeispiele für die Ausnahmebehandlung in PHP7

黄舟
Freigeben: 2023-03-06 14:10:02
Original
1385 Leute haben es durchsucht

Vorwort

Zu den Änderungen in PHP7 gehört die Ausnahmebehandlung, die größere Auswirkungen haben.

Übersicht

Mehr Ausnahmen werden direkt über PHP behandelt. Der Unterschied zum vorherigen PHP5 besteht darin, dass mehr Ausnahmen über Fehlerausnahmen ausgelöst werden.

Als normale Erweiterung werden weiterhin Fehlerausnahmen angezeigt, bis der entsprechende catch-Block übereinstimmt. Wenn keine Übereinstimmung vorliegt, wird die Verarbeitung durch den Satz set_exception_handler() ausgelöst. Wenn kein Standard-Ausnahmebehandler vorhanden ist, wird die Ausnahme in einen schwerwiegenden Fehler umgewandelt und wie ein herkömmlicher Fehler behandelt.

Da Error keine Ausnahmen in der Fehlerhierarchie erbt, fängt Code wie dieser catch (Exception $e) { ... } die entsprechende Ausnahme in PHP5 nicht ab. Wir können den Code catch (Error $e) { ... } oder set_exception_handler() verwenden, um Fehler zu behandeln.

Falsche Hierarchie

  • Wurfbar

    • ….

    • ArithmeticError Arithmetischer Fehler

    • AssertionError Statement Error

    • ParseError Parse Error

    • TypeError Typfehler

    • pisionByZeroError Divisor by 0 error

    • Error Error

    • Ausnahme

PHP RFC

Throwable Interface

function add(int $left, int $right) {
    return $left + $right;
}try {    echo add('left', 'right');
} catch (Exception $e) {    // Handle exception} catch (Error $e) { // Clearly a different type of object
    // Log error and end gracefully
    var_dump($e);
}
Nach dem Login kopieren

Hier gibt es keinen Server-500-Fehler. Der Grund dafür ist, dass der Fehler in PHP7 ihn abfängt und sich nicht auf dem Server ausbreitet.

object(TypeError)#1 (7) {
  ["message":protected]=>  
  string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14"
  ["string":"Error":private]=>  string(0) ""
  ["code":protected]=>  int(0)
  ["file":protected]=>  string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
  ["line":protected]=>  int(9)
  ["trace":"Error":private]=>
  array(1) {
    [0]=>
    array(4) {
      ["file"]=>      string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
      ["line"]=>      int(14)
      ["function"]=>      string(3) "add"
      ["args"]=>
      array(2) {
        [0]=>        string(4) "left"
        [1]=>        string(5) "right"
      }
    }
  }
  ["previous":"Error":private]=>
  NULL
}
Nach dem Login kopieren

Damit wir sie durch Protokolle aufzeichnen können.

Ausnahmen in der Engine (für PHP 7)

function call_method($obj) {
    $obj->method();
}try {
    call_method(null);
     // oops!
     } 
     catch (EngineException $e) {    
    echo "Exception: {$e->getMessage()}\n";
}//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
Nach dem Login kopieren

Wenn die Ausnahme nicht abgefangen wird, wird PHP weiterhin denselben schwerwiegenden Fehler auslösen, wie es derzeit der Fall ist.

E_STRICT-Hinweise neu klassifizieren


Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Codebeispiele für die Ausnahmebehandlung in PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage