ホームページ バックエンド開発 PHPチュートリアル PHPのエラーや例外の詳しい説明と関連知識

PHPのエラーや例外の詳しい説明と関連知識

Jul 25, 2020 pm 05:32 PM
php 異常な 間違い

PHPのエラーや例外の詳しい説明と関連知識

PHP エラー レベル

解析エラー > 致命的エラー > Waning > Notice > 非推奨

  • 非推奨 最低レベルのエラー (非推奨、提案ではありません) )
    これは、期限切れの関数を使用しているときに表示され、プログラムが引き続き実行されます

  • 通知レベルのエラーを通知します
    未定義の関数を使用します変数、定数、または配列キーが引用符で囲まれていない場合に表示され、プログラムは引き続き実行されます。

  • #下降警告レベル エラー
    問題がありますコードを変更する必要があります。 ! !プログラムは実行を継続します

  • 致命的エラー エラー レベルのエラー
    プログラムはエラーを直接報告するため、コードを変更する必要があります。 ! !プログラムの実行を中断するには、 register_shutdown_function() 関数を使用して、プログラムが終了する前に関数をトリガーします。

  • 解析エラー 構文解析エラー
    エラーは次のとおりです。構文チェック段階で報告されるため、コードを修正する必要があります。 ! !プログラムの実行を中断すると、ini ファイルを変更してエラー メッセージをログに書き込む以外に何もできなくなります

  • E_USER_関連エラー
    ユーザー定義エラー、ユーザー手動でエラーをスローし、カスタマイズされたエラー処理を実行します

PHP エラー関連関数

  • ini_set('display_errors', 0); //エラー出力をオフにする (開発環境はオン、実稼働環境はオフ)

  • error_reporting (E_ALL&~E_NOTICE); //エラー報告レベルを設定します

  • ini_set('error_reporting',0); //エラー報告レベルを設定します

PHP エラー設定

  • スクリプトでの設定に加えて、次のこともできます。 php.ini で設定します 設定ファイルで設定します

  • #error_reporting = E_ALL&~E_NOTICE; //エラー報告レベルを設定します

  • #display_errors = 1;

    //開発環境を開き、実稼働環境を閉じる

PHP 例外

##PHP 例外は新しく追加された機能です。JAVA/C# 例外とは異なり、PHP 例外は、自動的にスローされるのではなく、手動で
    throw new Exception
  • をスローする必要があります。システム

    PHP エラーと例外の違い、これらは 2 つの
  • 異なる概念
  • ですが、共通点があります。例外がキャッチされ処理されない場合、プログラムは終了し、致命的なエラーが報告されます。これを見ると、誰もが例外が一種のエラーであると考えるでしょう。これは幻想ですが、このように理解できます。ただし、プログラムは例外がキャッチされた後も実行を続けることができますが、実際の致命的エラーが発生した後にプログラムを終了する必要があります。

    例外は # を使用して処理できます。 ##try{}catch(){}
    を使用してキャプチャをキャプチャします。キャプチャ後、後続のコードは引き続き実行できますが、

    try{}catch(){}
    # を使用してエラーをキャプチャすることはできません。
  • # #例外がスローされた場合は、それをキャッチする必要があります。そうしないと、プログラムは実行を終了します。

    #PHP 例外とエラーのスロー
例外のスロー:

新しい例外をスローする('何らかのエラー メッセージ');

エラー スロー:
    trigger_error()
  • ## trigger_error()
  • トリガーされたエラーは

    try-catch 例外キャッチ ステートメントでは捕捉されません

  • #PHP エラー処理

  • ##set_error_handler()

Deprecated

    Notice## のみを処理できます#、
  • Waning

    これら 3 つのレベルのエラー。処理後、スクリプトはエラーの後の行を実行し続けます。

register_shutdown_function()

このメソッドはスクリプト終了前の最後のコールバック関数であるため、die()/error (例外)/スクリプトが正常に終了したかどうかに関係なく呼び出されます

    PHP 例外処理
set_Exception_handler()

デフォルトの例外ハンドラを設定します。try/catch キャプチャがある場合、この関数は実行されません。そうでない場合は実行されます。また、実行された場合、スクリプトは次のコード行の実行を継続しません。例外が発生した場所で、プログラムはただちに終了します。

  • set_Exception_handler()

    Notes

  • set_Exception_handler(“myException” )
関数名

を受け入れるだけでなく、

クラスメソッド
    も受け入れることができます(
  • パブリック静的メソッド

    およびパブリック非静的メソッドも受け入れ可能)ただし、

    配列形式
  • である必要があり、配列の最初の値は「
クラス名

」、2番目のパラメータは「メソッド名」です。次のコードに示すように:

<?php
class App{
    function myException($exception) {
        echo "<b>Exception:</b> " , $exception->getMessage();
    }
}
 
set_exception_handler(array(&#39;App&#39;,&#39;myException&#39;));
 
throw new Exception(&#39;Uncaught Exception occurred&#39;);
?>
ログイン後にコピー
PHP 例外分類ユーザーの動作によって発生する例外

1. バリデーターに合格しない

2、没查询到结果

3、需要向用户返回具体信息

4、不需要记录日志

5、可作为异常或者不作为异常,根据需求和个人情况而定

  • 由于服务器自身导致出现异常

    1、代码出错

    2、调用第三方接口错误

    3、不需要向用户返回具体信息

    4、需要记录日志

  • 在程序中PHP异常的自动抛出

    • 由于PHP异常是后面版本新增的特性,设计上与JAVA/C#的异常不一样,JAVA的异常大部分是系统自动抛出,而PHP异常不是系统自动抛出,需要手动抛出导致PHP异常在程序中的作用减半(异常就是意料之外的事情,根本我们意料不到的,如果用手动抛出,证明已经预先预料到了,那异常的意义就变味了)

    • 在PHP中异常是手动抛出的,而错误是系统自动抛出的(也可手动抛)

    • 我们需要把异常做成系统自动抛出接(例如JAVA)就必须借助错误(这三种错误DeprecatedNoticeWaning,其他的错误不行,因为会终止程序运行)

    <?php
    
        set_error_handler(&#39;error_handler&#39;);
    
        function error_handler($errno, $errstr, $errfile, $errline) {
            throw new Exception($errstr);
        }
    
        try {
            $num = 100 / 0;
        } catch(Exception $e) {
            echo $e -> getMessage() . &#39;<br/>&#39;;
        }
    
        echo "end";
    ?>
    ログイン後にコピー

    执行结果:

    Division by zero
    end
    ログイン後にコピー

    PHP7 异常处理的大变化

    • 一段TP5源代码引出PHP7异常的变化

      PHPのエラーや例外の詳しい説明と関連知識

      明明set_exception_handler()函数只可以捕获Exception类或派生类的对象,为何还需要捕获的对象做判断呢?结果引出了PHP7的变化,请看下面分析

    • 前面已经讲过异常是需要手动抛出,及时上面所说的方法最多也是把DeprecatedNoticeWaning这3类错误封装成系统自动抛出的异常,但致命错误仍然还是无法封装成系统自动抛出的异常,因为致命错误(Fatel Error)仍然无法捕获

    • 在PHP7之前,DeprecatedNoticeWaning这类错误是可以捕获的(使用set_error_handler()函数),而Fatel Error无法捕获的

    • 在PHP7之后,出现了一个异常与错误通用的接口Throwable,Exception类与Error类都实现了该接口,导致Error类或Error类的派生类的错误对象(大部分Fatel Error,而之前三类错误不变)也可以像Exception一样被捕获(2种捕获方法:1、try/catch 2、set_exception_handler())

    • 示例代码

    try{
        go();//该函数未定义
    }catch(Exception $e){
        //捕获异常
    }catch(Error $er){
        //捕获错误
    }
    ログイン後にコピー

    相关教程推荐:《PHP教程

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

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

    PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

    PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

    Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

    今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

    あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

    PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

    このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

    JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

    JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

    母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

    文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

    PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

    静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

    PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

    PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

    See all articles