Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Ausnahme- und Fehlerbehandlung in PHP7

Detaillierte Erläuterung der Ausnahme- und Fehlerbehandlung in PHP7

coldplay.xixi
coldplay.xixinach vorne
2021-03-30 10:38:142516Durchsuche

Detaillierte Erläuterung der Ausnahme- und Fehlerbehandlung in PHP7

Zunächst möchte ich darauf hinweisen, dass die PHP-Version des Autors 7.2 ist.

    • Übersicht über Ausnahmen und Fehler
        • Was ist eine Ausnahme?
        • Was ist ein Fehler?
        • Ausnahmebehandlung
    • Fehlerstufe
    • Benutzerdefinierter Fehlerhandler
        • set_error_handler()
        • set_Exception_handler()
        • register_shutdown_function()
        • Framework-Fehlerverarbeitung

Empfohlen (kostenlos): PHP7

Übersicht über Ausnahmen und Fehler

Was sind Ausnahmen?

Ausnahme bezieht sich auf Situationen, die nicht den Erwartungen entsprechen und sich vom normalen Ablauf während des Programmbetriebs unterscheiden.

Wenn Sie beispielsweise eine Verbindung zur Datenbank herstellen und alle Parameter geschrieben werden, der Link jedoch nicht verbunden werden kann, ist dies nicht wie erwartet.

Kann durch Try-Catch abgefangen werden. Was ist ein Fehler?

Es handelt sich um ein Problem, das auf das PHP-Programm selbst zurückzuführen ist. Es wird normalerweise durch illegale Syntax- und Umgebungsprobleme verursacht, die dazu führen, dass der Compiler die Prüfung nicht besteht oder sogar nicht ausgeführt werden kann.

Bei den Erwärmungen und Hinweisen, auf die man normalerweise stößt, handelt es sich allesamt um Fehler, die jedoch unterschiedlicher Schwere sind.


Zum Beispiel:

TypeError (Typfehler) Die von mir angegebenen Funktionsparametertypen stimmen nicht mit den übergebenen Parametern überein
  • ArithmeticError (Arithmetikfehler)
  • ParseError (Analysefehler) Fügen Sie in die geladene Datei „demo.php“ ein ”, oder es liegt ein Syntaxfehler in eval(); vor, der einen Parsingfehler verursacht
  • AssertionError (Assertionsfehler) Dieser Fehler wird generiert, wenn Assertion wirksam wird
  • pisionByZeroError (Nenner ist Null) Bei Operationen wie Division ist der Nenner 0
  • Mit Ausnahme dieser Mehreren Situationen sind alle anderen Ausnahmen in der Zukunft, und Sie wissen nicht, ob die Ausnahme ein Fehler oder eine Ausnahme ist, können Sie einen Fehler wie diesen auslösen: > >Schwerwiegender Fehler > Hinweis >Veraltet
try{
    ……
}catch(Throwable $e){
    ……
}

Benutzerdefinierter Fehlerhandler

Manchmal kann der mit PHP gelieferte Fehlerhandler unsere Anforderungen nicht vollständig erfüllen. Manchmal müssen wir alle die Ausnahmebehandlung manuell neu schreiben.

php stellt uns drei Funktionen zur Verfügung, die uns dabei helfen, damit umzugehen, nämlich

set_error_handler()

Funktion zum Hosten des Fehlerhandlers, der angepasst werden kann Fehlerbehandlung Verfahren.

Wenn im Code vor dieser Funktion ein Fehler auftritt, wird unsere benutzerdefinierte Verarbeitungsfunktion nicht aufgerufen, da sie noch nicht registriert wurde.

Nach dem Festlegen dieser Funktion ist error_reporting() ungültig.

Parse error >Fatal Error > Waning > Notice >Deprecated

Deprecated 最低级别的错误(不推荐,不建议)
使用一些过期函数的时候会出现,程序继续执行

Notice 通知级别的错误
使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行
        E_NOTICE      // 运行时通知。表示脚本遇到可能会表现为错误的情况.
        E_USER_NOTICE // 用户产生的通知信息。Waning 警告级别的错误
程序出问题了,需要修改代码!!!程序继续执行
        E_WARNING         // 运行时警告 (非致命错误)。
        E_CORE_WARNING    // PHP初始化启动过程中发生的警告 (非致命错误) 。
        E_COMPILE_WARNING // 编译警告
        E_USER_WARNING    // 用户产生的警告信息Fatal Error 错误级别的错误
程序直接报错,需要修改代码!!!中断程序执行,可使用register_shutdown_function()函数在程序终止前触发一个函数
        E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本
        E_CORE_ERROR    // PHP启动时初始化过程中的致命错误
        E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERROR
        E_USER_ERROR    // 自定义错误消息。像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR)Parse error 语法解析错误
语法检查阶段报错,需要修改代码!!!中断程序执行,除了修改ini文件,将错误信息写到日志中,什么也做不了
        E_PARSE  //编译时的语法解析错误

自定义错误处理程序

有的时候,php 中自带的错误处理程序,并不能完全满足我们得需要,大部分时候,我们都需要手动重写异常处理。

php 给我们提供了三个函数来帮助我们来处理,分别是

set_error_handler()

  • 函数来托管错误处理程序,可自行定制错误的处理流程。
  • 如果此函数之前的代码发生错误,那么不会调用我们自定义的处理函数,因为还未注册
  • 设置此函数后 error_reporting() 将会失效
  • 以下级别的错误不能由用户定义的函数来处理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING 该函数只能捕捉我们的 部分 Warning 和 Note 级别的错误

set_exception_handler()

  • 用于没有被捕获的异常处理

register_shutdown_function()

  • 作用:注册一个会在php中止时执行的函数
  • 捕获PHP的错误:Fatal Error、Parse Error等,这个方法是PHP脚本执行结束前最后一个调用的函数,比如脚本错误、die()、exit、异常、正常结束都会调用,
  • 如果拿来用错误处理的时候,需要配合error_get_last() 它能获取最后发生的错误。
举例
register_shutdown_function('shutdown');function shutdown(){
    if ($error = error_get_last()) {
        var_dump($error);
    }
}$name   //没写 ; 号

执行结果
Parse error: syntax error, unexpected ';' in /app/swoole/errorDemo.php on line 34Fehler auf den folgenden Ebenen können nicht auftreten Wird von benutzerdefinierten Funktionen verwendet. Zu behandeln: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING. Diese Funktion kann nur einige unserer Fehler auf Warnungs- und Hinweisebene abfangen /code>

Wird für die Behandlung nicht abgefangener Ausnahmen verwendet

register_shutdown_function()

Funktion: Registrieren Sie eine Funktion, die ausgeführt wird, wenn PHP beendet wird

PHP abfangen Fehler: Schwerwiegender Fehler, Parse-Fehler usw. Diese Methode ist die letzte Funktion, die aufgerufen wird, bevor die PHP-Skriptausführung endet. Beispielsweise werden Skriptfehler, die(), Exit, Ausnahmen und normale Enden aufgerufen Zur Fehlerbehandlung muss mit error_get_last() zusammengearbeitet werden, um den zuletzt aufgetretenen Fehler abzurufen.

rrreee🎜Ausführungsergebnis 🎜Parse-Fehler: Syntaxfehler, unerwartetes ';' in /app/swoole/errorDemo.php in Zeile 34 🎜 Emmmmm Ist das nicht Unsinn? Es ist offensichtlich nicht ausgeführt?🎜🎜Der Grund dafür ist, dass unser PHP vor der Ausführung des Programms zunächst die Syntaxprobleme unseres Programms überprüft. Wenn es keine Probleme gibt, können wir unser Programm ausführen. 🎜🎜Unser obiger Code hat unsere Syntaxprüfung nicht bestanden, daher wurde direkt ein Fehler gemeldet. 🎜🎜Die Frage ist also? Warum melden uns die Frameworks immer Fehler, wenn wir uns im Framework befinden? 🎜🎜Framework-Fehlerbehandlung🎜🎜Im Framework wird sein Code über eine Eintragsdatei geladen. Wenn unser PHP Syntaxfehler erkennt, überprüfen wir nur unsere index.php, wenn dies erforderlich ist, wird dies nicht erkannt. Wenn unser Code einen Fehler macht, wird dieser zur Laufzeit erkannt, sodass unser Framework entsprechend reagieren kann🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Ausnahme- und Fehlerbehandlung in PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen