ホームページ  >  記事  >  バックエンド開発  >  PHP のエラーと例外

PHP のエラーと例外

WBOY
WBOYオリジナル
2016-07-29 09:16:171443ブラウズ

エラーと例外は 2 つの完全に異なる概念です

エラー

エラーの種類

合計 16 個

定数 説明 備考
1 E_エラー(整数) 致命的な実行時エラー。このタイプのエラーは、メモリ割り当てによって引き起こされる問題など、通常は回復不可能な状況です。その結果、スクリプトは終了し、実行が続行されなくなります。
2 E_WARNING (整数) 実行時警告 (致命的ではないエラー)。プロンプト メッセージのみが表示されますが、スクリプトは終了しません。
4 E_PARSE (整数) コンパイル時の構文解析エラー。解析エラーはパーサーによってのみ生成されます。
8 E_NOTICE (整数) 実行時通知。スクリプトでエラーとして表示される可能性のある状況が発生したことを示しますが、正常に実行できるスクリプトにも同様の通知が表示される可能性があります。
16 E_CORE_ERROR (整数) PHPの初期化起動中に発生した致命的なエラー。このエラーは E_ERROR に似ていますが、PHP エンジン コアによって生成されます。 PHP 4以降
32 E_CORE_WARNING (整数) PHPの初期化起動中に警告(致命的ではないエラー)が発生しました。 E_WARNING に似ていますが、PHP エンジン コアによって生成されます。 PHP 4以降
64 E_COMPILE_ERROR (整数) 致命的なコンパイル時エラー。 E_ERROR に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4以降
128 E_COMPILE_WARNING (整数) コンパイル時間の警告(致命的ではないエラー)。 E_WARNING に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4以降
256 E_USER_ERROR (整数) ユーザー生成のエラーメッセージ。 E_ERROR に似ていますが、ユーザーがコード内で PHP 関数trigger_error()を使用して生成されます。 PHP 4以降
512 E_USER_WARNING (整数) ユーザー生成の警告メッセージ。 E_WARNING に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4以降
1024 E_USER_NOTICE (整数) ユーザーによって生成された通知情報。 E_NOTICE に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4以降
2048 E_STRICT (整数) コードの最高の相互運用性と上位互換性を確保するために、PHP のコード変更の提案を有効にします。 PHP 5以降
4096 E_RECOVERABLE_ERROR (整数) 捕捉される可能性のある致命的なエラー。 これは、潜在的に危険なエラーが発生したが、PHP エンジンが不安定になる原因ではなかったことを示します。 エラーがユーザー定義のハンドラー (set_error_handler() を参照) によって捕捉されない場合、E_ERROR となり、スクリプトは終了します。 PHP 5.2.0以降
8192 E_DEPRECATED (整数) 実行時通知。有効にすると、将来のバージョンで正しく動作しなくなる可能性があるコードについて警告が表示されます。 PHP 5.3.0以降
16384 E_USER_DEPRECATED (整数) ユーザー出力が低い警告メッセージ。 E_DEPRECATED と似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 5.3.0 以降
30719 E_ALL (整数) E_STRICT すべてのエラーおよび警告メッセージ。 PHP 5.3.x では 30719、PHP 5.2.x では 6143、以前は 2047

エラーレベル

(1) 非推奨

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

出力

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

(2) Notice 通知レベル

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

出力

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

(3) Warning 警告レベル

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

output

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

(4) Fatal error 致命的レベル

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

output

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

(5) Parse error 解析エラー

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

output

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

(6) E_USER_ ユーザーレベルのエラー

設定エラー

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

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

実行時にerror_reportingディレクティブを設定できます

<code>error_reporting()
</code>

ini_set関数を使用して設定することもできますini_set函数设置

用户抛出错误

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

记录日志

php.ini中的配置

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

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

是否忽略重复错误
ignore_repeated_errors

是否忽略重复信息来源
ignore_repeated_source

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

记录日志函数

<code>error_log()

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

自定义错误处理

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

异常

<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>

从上面的代码可以看出,PHP中不会自动抛出异常,一定要使用throw,这一点与Java不同

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

内置异常类如PDO不用throw

throw

ユーザーがスローしたエラー

<code>Fatal error: Cannot use try without catch or finally in /Users/weiheli/www/php/003.php on line 8
</code>
ログを記録します

php.ini設定
<code>set_exception_handler — 设置一个用户定义的异常处理函数
</code>
ロギング関数
rrreee

カスタマイズされたエラー処理

rrreee

Exception

rrreee

上記のコードからわかるように、PHP では例外は自動的にスローされません。これは throw を使用する必要があります。 Javaとは異なります

rrreee🎜PDOなどの組み込み例外クラスはthrowを使用しません🎜🎜throw以降のステートメントは実行されません🎜🎜tryは単独では使用できません🎜rrreee🎜 カスタム例外処理 🎜rrreee🎜🎜🎜🎜 著作権表示: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。 🎜🎜 🎜 上記では、PHP のエラーと例外を、関連コンテンツも含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜 🎜 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。