検索
ホームページバックエンド開発PHPチュートリアル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 サイトの他の関連記事を参照してください。

    声明
    この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

    PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

    PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

    PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

    PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

    PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

    PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

    PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

    PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

    phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

    スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

    PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

    PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

    PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

    PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

    PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

    See all articles

    ホット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

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    SecLists

    SecLists

    SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境