php7の例外・エラー処理を詳しく解説

coldplay.xixi
リリース: 2023-02-17 21:24:01
転載
2589 人が閲覧しました

php7の例外・エラー処理を詳しく解説

#まず最初に、作成者の PHP バージョンは 7.2 であることを述べておきます

  • ##例外とエラーの概要
      • 例外とは何ですか?
        • エラーとは何ですか?
        • #例外処理
      • エラーのレベル
    • カスタム エラー ハンドラー
    • ## set_error_handler()
      • set_Exception_handler()
        • register_shutdown_function()
        • フレームワーク エラー処理
    • 推奨 (無料):
    PHP7

##例外とエラーの概要例外とは?

例外とは、プログラム動作中の通常のプロセスとは異なる、期待を満たさない状況を指します。 たとえば、データベースに接続し、すべてのパラメータが書き込まれているにもかかわらず、リンクが上昇できないことが判明した場合、これは予想どおりではありません。

try- でキャプチャできます。 catch

エラーとは何ですか?

は、PHP プログラム自体に属する問題です。通常、不正な構文や環境の問題によって引き起こされ、コンパイラーがチェックに合格しなかったり、実行に失敗したりすることがあります。

私たちが通常目にする警告や通知はすべてエラーですが、レベルは異なります。

例:

TypeError (型エラー) 指定した関数パラメーターの型は、

ArithmeticError (算術エラー) で渡されたパラメーターと一致しません。

ParseError (解析エラー) ロードされたファイルに、include "demo.php" または eval() の構文エラーがあり、解析エラーが発生します

    AssertionError (アサーション エラー) このエラーは、assert 時に生成されます
  • pisionByZeroError (分母がゼロ) 除算などの演算中、分母が 0
  • これらの状況を除き、残りはすべて例外です
  • 例外処理
  • 前の php5 では、try-catch でエラーをスローしました。
したがって、将来例外をキャッチしたいが、例外が発生したかどうかがわからない場合は、はエラーまたは例外です。このようにスローできます

try{
    ……
}catch(Throwable $e){
    ……
}
ログイン後にコピー

エラー レベル


php のエラーにもレベルがあります

Parseエラー

>致命的エラー >

衰退

>

通知

>非推奨<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="prettyprint">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 //编译时的语法解析错误</pre><div class="contentsignin">ログイン後にコピー</div></div>カスタム エラー ハンドラーPHP に付属のエラー ハンドラーではニーズを完全に満たせない場合があり、ほとんどの場合、例外処理を手動で書き直す必要があります。 php には、エラーの処理に役立つ 3 つの関数が用意されています。つまり、

set_error_handler()

エラーをホストする関数です。エラー処理プロセスをカスタマイズできます。

この関数の前のコードでエラーが発生した場合、カスタム処理関数はまだ登録されていないため呼び出されません。

この関数を設定すると、error_reporting() は無効になります

次のレベルのエラーは、ユーザー定義関数では処理できません: E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING。この関数は、警告およびメモ レベルのエラーの一部のみをキャプチャできます
  • #set_Exception_handler()
  • キャッチされない例外処理の場合

register_shutdown_function()

    関数: PHP 終了時に実行される関数を登録します。
  • PHP エラー: 致命的エラー、解析エラーなどをキャプチャします。このメソッドは、スクリプト エラーなど、PHP スクリプトの実行が終了する前に呼び出される最後の関数です。 die()、exit、例外、正常終了がすべて呼び出されます

エラー処理に使用する場合は、error_get_last() と連携する必要があります 最後に発生したエラーを取得できます。

    举例
    register_shutdown_function(&#39;shutdown&#39;);function shutdown(){
        if ($error = error_get_last()) {
            var_dump($error);
        }
    }$name   //没写 ; 号
    ログイン後にコピー

  • 実行結果
  • 解析エラー: 構文エラー、/app/swoole/errorDemo.php の 34 行目に予期しない ';'
  • えっと、これは違いますナンセンスですか?明らかに実行されていませんか? 実は、その理由は、プログラムを実行する前に、PHP がまずプログラムの構文の問題をチェックし、問題がなければプログラムを実行できるからです。
  • 上記のコードは構文チェックに合格しなかったため、エラーが直接報告されました。


    それでは質問が来ますか?私たちがフレームワーク内にいるとき、なぜフレームワークは常にエラーを報告するのでしょうか? フレームワークのエラー処理

    フレームワークでは、そのコードはエントリ ファイルを通じてロードされます。 PHP が構文エラーを検出した場合、index.php のみをチェックし、必要な場合でも検出されません。コードでエラーが発生した場合、それは実行時に検出されたエラーであるため、フレームワーク内の対応するエラーは

    になる可能性があります。

    以上がphp7の例外・エラー処理を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート