Heim  >  Artikel  >  Backend-Entwicklung  >  Fehler und Ausnahmen in PHP

Fehler und Ausnahmen in PHP

WBOY
WBOYOriginal
2016-07-29 09:16:171490Durchsuche

Fehler und Ausnahmen sind zwei völlig unterschiedliche Konzepte

Fehler

Fehlertypen

Insgesamt 16

常量 说明 备注
1 E_ERROR (integer) 致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。
2 E_WARNING (integer) 运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。
4 E_PARSE (integer) 编译时语法解析错误。解析错误仅仅由分析器产生。
8 E_NOTICE (integer) 运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。
16 E_CORE_ERROR (integer) 在PHP初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由PHP引擎核心产生的。 since PHP 4
32 E_CORE_WARNING (integer) PHP初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由PHP引擎核心产生的。 since PHP 4
64 E_COMPILE_ERROR (integer) 致命编译时错误。类似E_ERROR, 但是是由Zend脚本引擎产生的。 since PHP 4
128 E_COMPILE_WARNING (integer) 编译时警告 (非致命错误)。类似 E_WARNING,但是是由Zend脚本引擎产生的。 since PHP 4
256 E_USER_ERROR (integer) 用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 4
512 E_USER_WARNING (integer) 用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 4
1024 E_USER_NOTICE (integer) 用户产生的通知信息。类似 E_NOTICE, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 4
2048 E_STRICT (integer) 启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。 since PHP 5
4096 E_RECOVERABLE_ERROR (integer) 可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。 since PHP 5.2.0
8192 E_DEPRECATED (integer) 运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。 since PHP 5.3.0
16384 E_USER_DEPRECATED (integer) 用户产少的警告信息。 类似 E_DEPRECATED, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 5.3.0
30719 E_ALL (integer) E_STRICT出外的所有错误和警告信息。 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously

Fehlerstufe

(1) Veraltet Veraltet

<code>if (ereg('/llo/', 'hello world')) {
    echo 'yes2';
} else {
    echo 'no2';
}
</code>

Ausgabe

<code>Deprecated: Function ereg() is deprecated in /Users/weiheli/www/php/003.php on line 3
no
</code>

(2) Hinweis Benachrichtigungsstufe

<code>$arr = ['a'=>'aaa', 'b'=>'bbb'];
echo $arr[a];
</code>

Ausgabe

<code>Notice: Use of undefined constant a - assumed 'a' in /Users/weiheli/www/php/003.php on line 4
aaa
</code>

(3) Warnstufe Warnung

<code>settype($var, 'abc');
echo $var;
</code>

Ausgabe

<code>Warning: settype(): Invalid type in /Users/weiheli/www/php/003.php on line 3
</code>

(4) Schwerwiegender Fehler Schwerwiegende Stufe

<code>// 调用未定义的函数
fn(12);
</code>

Ausgabe

<code>Fatal error: Call to undefined function fn() in /Users/weiheli/www/php/003.php on line 3
</code>

(5) Analysefehler Analysefehler

<code>echo 'hello world'
</code>

Ausgabe

<code>Parse error: parse error, expecting `','' or `';'' in /Users/weiheli/www/php/003.php on line 3
</code>

(6) E_USER_ Fehler auf Benutzerebene

Konfigurationsfehler

<code>; 是否显示错误。解析错误始终都会显示
display_errors = On

; 显示哪些错误
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL
</code>

Sie können die error_reporting-Direktive zur Laufzeit festlegen

<code>error_reporting()
</code>

Sie können auch die ini_setFunktion verwenden, um

vom Benutzer ausgelöste Fehler festzulegen Fehler

<code>trigger_error(string $error_msg [, int $error_type = E_USER_NOTICE ])
</code>

Protokollierung

Konfiguration in php.ini

<code>是否记录错误日志
log_errors = On

错误日志最大字节数
log_errors_max_len = 1024

是否忽略重复错误
ignore_repeated_errors

是否忽略重复信息来源
ignore_repeated_source

保存到系统日志中
error_log = syslog
</code>

Protokollierungsfunktion

<code>error_log()

openlog() 
syslog()
closelog() 
</code>

Angepasste Fehlerbehandlung

<code>set_error_handler — 设置一个用户定义的错误处理函数
</code>

Ausnahme

<code>try {
    $num = 1 / 0;
} catch (Exception $e) {
    echo $e->getMessage();
}

Warning: Division by zero in /Users/weiheli/www/php/003.php on line 4
</code>

Wie Sie dem obigen Code entnehmen können, werden Ausnahmen in PHP nicht automatisch ausgelöst. Sie müssen throw verwenden, was sich von Java unterscheidet

<code>try {
    $num = 0;
    if ($num === 0) {
        throw new Exception('不能为0');
    }
} catch (Exception $e) {
    echo $e->getMessage();
    echo 'abc';
}
</code>

Eingebaute Ausnahmeklassen wie PDO werden nicht verwendet. Die Anweisungen nach throw

throw werden nicht ausgeführt

try kann nicht unabhängig verwendet werden

<code>Fatal error: Cannot use try without catch or finally in /Users/weiheli/www/php/003.php on line 8
</code>

Benutzerdefinierte Ausnahmebehandlung

<code>set_exception_handler — 设置一个用户定义的异常处理函数
</code>

Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden .

Das Obige stellt die Fehler und Ausnahmen in PHP vor, einschließlich verwandter Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
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
Vorheriger Artikel:ThinkPHP-Quellcode-LernmethodeNächster Artikel:ThinkPHP-Quellcode-Lernmethode