Zu den Änderungen in PHP7 gehört die Ausnahmebehandlung, die größere Auswirkungen haben.
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.
Wurfbar
….
ArithmeticError Arithmetischer Fehler
AssertionError Statement Error
ParseError Parse Error
TypeError Typfehler
pisionByZeroError Divisor by 0 error
Error Error
Ausnahme
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); }
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 }
Damit wir sie durch Protokolle aufzeichnen können.
function call_method($obj) { $obj->method(); }try { call_method(null); // oops! } catch (EngineException $e) { echo "Exception: {$e->getMessage()}\n"; }//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
Wenn die Ausnahme nicht abgefangen wird, wird PHP weiterhin denselben schwerwiegenden Fehler auslösen, wie es derzeit der Fall ist.
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!