Heim > Artikel > Backend-Entwicklung > Was ist der Unterschied zwischen Fehler und Ausnahme in PHP?
Die meisten Informationen zum Unterschied zwischen Fehler und Ausnahme im Internet werden in Java erklärt. Es scheint, dass der Ausnahmebehandlungsprozess von PHP dem von Java ähnelt, um den Unterschied und die Erfassung von Fehlern und Ausnahmen zu lernen in PHP. Freunde, die es brauchen, können darauf verweisen.
Einen Teil des JSON-Parsing-Codes geschrieben. Da die Datenquelle nicht garantiert JSON ist, kann das Parsen fehlschlagen. Der json_decode von PHP meldet jedoch keinen Fehler, wenn er auf eine Zeichenfolge stößt, die nicht analysiert werden kann, und gibt direkt nichts zurück. Und selbst wenn es analysiert werden kann, kann ich nicht glauben, dass die darin enthaltenen Felder immer konsistent sind. Daher muss nicht nur festgestellt werden, ob es in JSON geparst werden kann, sondern auch, ob Felder fehlen. Aus Faulheit möchte ich zum Beispiel nur Ausnahmen abfangen, um
Versuch, die Eigenschaft eines Nichtobjekts abzurufen
Trying to get property of non-object
但是,下面的 try catch 怎么也捕获不到异常
try { // Code that may throw an Exception or Error. } catch (\Exception $t) { // Handle exception }
Google 了一下,才知道,PHP 中除了 Exception 还有 Error 的概念,而 Trying to get property of non-object,很不幸就属于 Error。
PHP 中 error 与 exception 的区别
看了几篇关于 PHP error 和 exception 区别的介绍文章,感觉都没有说到点上。我突然想,我为啥一定要知道他们的区别,因为我觉得这个设计是有问题的。例如,PHP5 时代,try catch 只能捕获 Exception,而不能捕获 Error。我非常不能理解 PHP 5 这种设计的意义是什么?而 PHP7 的处理方式,说明了我的观点是正确的。所以,我就没有兴趣去深究其起初的设计思路了。
PHP 7 的新特性
From now on, most of the errors are reported through the exception class Error.
interface Throwable |- Error implements Throwable |- ArithmeticError extends Error |- DivisionByZeroError extends ArithmeticError |- AssertionError extends Error |- ParseError extends Error |- TypeError extends Error |- ArgumentCountError extends TypeError |- Exception implements Throwable |- ClosedGeneratorException extends Exception |- DOMException extends Exception |- ErrorException extends Exception |- IntlException extends Exception |- LogicException extends Exception |- BadFunctionCallException extends LogicException |- BadMethodCallException extends BadFunctionCallException |- DomainException extends LogicException |- InvalidArgumentException extends LogicException |- LengthException extends LogicException |- OutOfRangeException extends LogicException |- PharException extends Exception |- ReflectionException extends Exception |- RuntimeException extends Exception |- OutOfBoundsException extends RuntimeException |- OverflowException extends RuntimeException |- PDOException extends RuntimeException |- RangeException extends RuntimeException |- UnderflowException extends RuntimeException |- UnexpectedValueException extends RuntimeExceptionNach der Suche bei Google Ich habe herausgefunden, dass es in PHP zusätzlich zu „Exception“ auch das Konzept „Error“ gibt und der Versuch, eine Eigenschaft eines Nichtobjekts abzurufen, leider unter „Error“ fällt. Der Unterschied zwischen Fehler und Ausnahme in PHPIch habe mehrere Einführungsartikel über den Unterschied zwischen Fehler und Ausnahme in PHP gelesen, aber ich habe das Gefühl, dass sie den Punkt nicht berührt haben. Ich dachte plötzlich, warum muss ich den Unterschied zwischen ihnen kennen, weil ich denke, dass mit diesem Design etwas nicht stimmt. Beispielsweise kann try Catch in der PHP5-Ära nur eine Ausnahme, aber keinen Fehler abfangen. Ich kann wirklich nicht verstehen, was dieses Design von PHP 5 bedeutet? Die Art und Weise, wie PHP7 damit umgeht, zeigt, dass mein Standpunkt richtig ist. Daher habe ich kein Interesse daran, mich mit seinen ursprünglichen Designideen zu befassen. Neue Funktionen von PHP 7
Von nun an werden die meisten Fehler über die Ausnahmeklasse Error gemeldet.
Das heißt, ab PHP 7 werden Error und Exception beide von Throwable geerbt .
Aus der Vererbungsbeziehung von Throwable können wir ersehen, dass Fehler und Ausnahme auf derselben Beziehungsebene stehen.
try { // Code that may throw an Exception or Error. } catch (\Throwable $t) { // Handle exception }
Erfassen Sie die Methode des Versuchs, Eigentum von Nicht-Objekten zu erhalten.
try { // Code that may throw an Exception or Error. } catch (\Throwable $t) { // Executed only in PHP 7, will not match in PHP 5.x } catch (\Exception $e) { // Executed only in PHP 5.x, will not be reached in PHP 7 }
Kompatibel mit den Schreibmethoden PHP 5 und PHP 7.
{ public function getMessage(): string; // Error reason public function getCode(): int; // Error code public function getFile(): string; // Error begin file public function getLine(): int; // Error begin line public function getTrace(): array; // Return stack trace as array like debug_backtrace() public function getTraceAsString(): string; // Return stack trace as string public function getPrevious(): Throwable; // Return previous `Trowable` public function __toString(): string; // Convert into string }
Einige integrierte Methoden Ausnahme
Zum Beispiel
Fehlercodedatei, Zeilennummer, spezifische Fehlermeldung, Fehlertyp
Verwenden Sie eine präzisere Erfassung oder eine umfassendere Erfassung
Oder BewertungssituationZum Beispiel die einzigartige Indexausnahme von MySQL, ich bin an eine präzise Erfassung gewöhnt . Weil es eine besondere Handhabung erfordert.
🎜In den meisten anderen Fällen denke ich, dass wir Throwable einfach im Großen und Ganzen erfassen. Der Grund dafür ist, dass Try Catch normalerweise zum Ignorieren von Ausnahmen verwendet wird, z. B. einige Ausnahmen mit geringer Wahrscheinlichkeit, die sich nicht auf die Logik auswirken. Es besteht keine Notwendigkeit, damit umzugehen, sodass die spezifische Ausnahme nicht allzu wichtig ist, solange das Protokoll aufgezeichnet wird. 🎜🎜Empfohlenes Lernen: 🎜php-Video-Tutorial🎜🎜Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Fehler und Ausnahme in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!