ホームページ php教程 php手册 php中异常处理方法总结

php中异常处理方法总结

May 25, 2016 pm 04:39 PM
PHP例外処理

当异常被触发时,通常会发生:在PHP5中添加了类似于其它语言的错误异常处理模块。在 PHP代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。

使用多个 catch 可以捕获不同的类所产生的异常,当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常,当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而 PHP 就会尝试查找第一个能与之匹配的 catch,如果一个异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught Exception ... (未捕获异常)的提示信息.

1、异常类的层级关系,代码如下:

class NotFoundException extends Exception{}

class InputException extends Exception{}

class DBException extends Exception{}

2、配置未捕捉异常的处理器,代码如下:

<?php
function exception_uncaught_handler(Exception $e) {
    header(&#39;Content-type:text/html; charset=utf-8&#39;);
    if ($e instanceof NotFoundException) exit($e->getMessage());
    elseif ($e instanceof DBException) exit($e->getMessage());
    else exit($e->getMessage());
}
set_exception_handler(&#39;exception_uncaught_handler&#39;);
?>
ログイン後にコピー

3、在数据库连接代码,手动抛出DBException异常但未使用try…catch进行捕获处理,该异常将被PHP自定义异常处理器,exception_uncaught_handler()函数处理:

<?php
$this->resConn = mysql_connect($CONFIGS[&#39;db_host&#39;], $CONFIGS[&#39;db_user&#39;], $CONFIGS[&#39;db_pwd&#39;]);
if (false == is_resource($this->resConn)) throw new DBException(&#39;数据库连接失败。&#39; . mysql_error($this->resConn));
?>
ログイン後にコピー

4、业务逻辑一瞥:

if (0 != strcmp($curAlbum->interest_id, $it))

throw new NotFoundException('很抱歉,你所访问的相册不存在');

以上就是PHP自定义异常处理器的具体使用方法.

php实例代码如下:

<?php
class customException extends Exception {
    public function errorMessage() {
        //error message
        $errorMsg = &#39;Error on line &#39; . $this->getLine() . &#39; in &#39; . $this->getFile() . &#39;: <b>&#39; . $this->getMessage() . &#39;</b> is not a valid E-Mail address&#39;;
        return $errorMsg;
    }
}
$email = "someone@example.com";
try {
    //check if
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
        //throw exception if email is not valid
        throw new customException($email);
    }
    //check for "example" in mail address
    if (strpos($email, "example") !== FALSE) {
        throw new Exception("$email is an example e-mail");
    }
}
catch(customException $e) {
    echo $e->errorMessage();
}
catch(Exception $e) {
    echo $e->getMessage();
}
?>
ログイン後にコピー

例子解释:上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常.

1.customException() 类是作为旧的 exception 类的一个扩展来创建的,这样它就继承了旧类的所有属性和方法.

2.创建 errorMessage() 函数,如果 e-mail 地址不合法,则该函数返回一个错误消息.

3.执行 "try" 代码块,在第一个条件下,不会抛出异常.

4.由于 e-mail 含有字符串 "example",第二个条件会触发异常.

5."catch" 代码块会捕获异常,并显示恰当的错误消息.

如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常,重新抛出异常,有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理,可以在一个 "catch" 代码块中再次抛出异常,代码如下:

总结:PHP异常的使用方法分三步:

第一步:定义异常类,如果不定义就用系统默认的异常类;

第二步:当出现异常时用 throw 抛出异常,例如 ex1($num2);异常的参数是$num2用该异常的getMessage()获取;

第三步:触发异常,用try子句,当满足条件时 throw new ex1($num);

第四步:catch捕获异常 catch (ex2 $e),相当于实例化一个定义好的异常类ex2为$e;

注意,异常可以定义多个,但是只能触发一个,也就是说只能用catch捕获一个异常.

基本异常类,创建可抛出一个异常的函数:

<?php
function num($num) {
    if ($num > 1) { //异常抛出条件
        $msg = "数值不能大于1″;//异常提示信息 
  throw new Exception($msg);//抛出异常 
 } 
 echo "数值小于1″;
    }
    //在 "try" 代码块中触发异常
    try {
        num(3);
        echo "执行正常";
    }
    //捕获异常
    catch(Exception $e) {
        echo "错误信息:" . $e->getMessage(); //Exception()的系统方法获取异常信息
        echo "错误文件:" . $e->getFile(); //Exception()的系统方法获取异常文件名
        echo "行数:" . $e->getLine(); //Exception()的系统方法获取异常行数
        
    }
    //======================================================================
    echo "<br>========================================================<br>";
    //扩展基本异常类
    function checkEmail($email) { //定义一个可以抛出异常的判断EMAIL合法性的函数
        if (filter_var($email, FILTER_VALIDATE_EMAIL) == false) {
            throw new checkEmailException($email); //抛出异常用EMAIL做参数
            
        }
        echo "邮件合法";
    }
    class checkEmailException extends Exception { //定义扩展异常类
        public function errormsg() {
            $msg = "错误原因:" . $this->getMessage() . "不是一个合法的EMAIL地址!";
            $msg.= "错误文件名:" . $this->getFile();
            $msg.= "错误行数:" . $this->getLine();
            echo $msg;
        }
    }
    $email = "email…..@chhua.com";
    try { //触发异常
        checkEmail($email);
    }
    //捕获异常
    catch(checkEmailException $e) {
        $e->errormsg();
    }
    //==================================多个异常的捕获
    echo "<br>===================================================<br>";
    class ex1 extends Exception { //定义一个异常类
        public function msg() {
            $msg = "错误原因:" . $this->getMessage() . "大于100<br>";
            $msg.= "错误文件:" . $this->getFile() . "<Br>";
            $msg.= "错误代码:" . $this->getCode() . "<br>";
            $msg.= "行数:" . $this->getLine() . "<br>";
            echo $msg;
        }
    }
    class ex2 extends Exception { //定义一个异常类
        public function msg() {
            $msg = "错误原因:" . $this->getMessage() . "等于100<br>";
            $msg.= "错误文件:" . $this->getFile() . "<Br>";
            $msg.= "行数:" . $this->getLine() . "<br>";
            echo $msg;
        }
    }
    $num2 = 100;
    try {
        if ($num2 > 100) { //当条件满足时触发
            throw new ex1($num2);
        }
        if ($num2 == 100) { //当条件满足时触发
            throw new ex2($num2);
        }
    }
    catch(ex2 $e) { //捕获触发的异常
        $e->msg();
    }
    catch(ex1 $e) { //捕获触发的异常
        $e->msg();
    }
?>
ログイン後にコピー


文章地址:

转载随意^^请带上本文地址!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

PHP 致命的エラー: キャッチされない例外「例外」の解決策 PHP 致命的エラー: キャッチされない例外「例外」の解決策 Aug 18, 2023 pm 03:28 PM

PHP は、Web サイトに強力で動的な機能を提供する、広く使用されているサーバー側プログラミング言語です。ただし、実際には、開発者はさまざまなエラーや例外に遭遇する可能性があります。一般的なエラーの 1 つは、PHPFatalerror:UncaughtException'Exception' です。この記事では、このエラーの原因とその修正方法について説明します。例外の概念 PHP では、例外とは、プログラムの実行プロセス中に発生する予期しない状況を指します。

PHP 例外処理のヒント: try...catch ブロックを使用して複数の例外をキャッチして処理する方法 PHP 例外処理のヒント: try...catch ブロックを使用して複数の例外をキャッチして処理する方法 Jul 29, 2023 pm 01:05 PM

PHP 例外処理のヒント: try...catch ブロックを使用して複数の例外をキャッチして処理する方法 はじめに: PHP アプリケーション開発において、例外処理は非常に重要な部分です。コード内でエラーまたは例外が発生した場合、適切な例外処理によりプログラムの堅牢性と信頼性が向上します。この記事では、try...catch ブロックを使用して複数の例外をキャプチャして処理する方法を紹介し、開発者がより柔軟で効率的な例外処理を実行できるようにします。例外処理の概要 例外とは、プログラムの実行中に発生するエラーまたは特殊な状況を指します。例外が発生した場合

PHP プログラムでの例外分類のベスト プラクティス PHP プログラムでの例外分類のベスト プラクティス Jun 06, 2023 am 08:01 AM

PHP コードを記述する場合、例外処理はコードの堅牢性と保守性を高めるために不可欠な部分です。ただし、例外処理も注意して使用する必要があります。そうしないと、さらに問題が発生する可能性があります。この記事では、例外処理を有効に活用してコードの品質を向上させるのに役立つ、PHP プログラムでの例外分類のベスト プラクティスをいくつか紹介します。例外の概念 PHP では、例外とは、プログラムの実行中に発生するエラーまたは予期しない状況を指します。通常、例外が発生するとプログラムの実行が停止し、例外メッセージが出力されます。

PHP 例外およびフォールト トレランス メカニズムを使用する方法は? PHP 例外およびフォールト トレランス メカニズムを使用する方法は? Jun 30, 2023 am 10:13 AM

PHP の例外処理とフォールト トレランス メカニズムを使用するにはどうすればよいですか?はじめに: PHP プログラミングでは、例外処理とフォールト トレランスのメカニズムが非常に重要です。コードの実行中にエラーまたは例外が発生した場合、例外処理を使用してこれらのエラーを捕捉および処理し、プログラムの安定性と信頼性を確保できます。この記事では、PHP の例外処理とフォールト トレランスのメカニズムの使用方法を紹介します。 1. 例外処理の基礎知識: 例外とは何ですか?例外とは、コードの実行中に発生するエラーまたは異常な状態であり、構文エラー、実行時エラー、論理エラーなどが含まれます。違うとき

PHP バックエンド関数開発でグローバル例外処理を実装するにはどうすればよいですか? PHP バックエンド関数開発でグローバル例外処理を実装するにはどうすればよいですか? Aug 05, 2023 pm 03:36 PM

PHP バックエンド関数開発でグローバル例外処理を実装するにはどうすればよいですか? PHP バックエンド開発において、例外処理は非常に重要な部分です。これはプログラム内のエラーを見つけて適切に処理するのに役立ち、それによってシステムの安定性とパフォーマンスが向上します。この記事では、PHP バックエンド関数開発でグローバル例外処理を実装する方法と、対応するコード例を紹介します。 PHP には例外処理メカニズムが用意されており、try および catch キーワードを使用して例外をキャッチし、それに応じて処理できます。グローバル例外処理とは、すべての例外処理を指します。

PHP で API を実装する際のデータ例外とエラー処理戦略を処理する方法 PHP で API を実装する際のデータ例外とエラー処理戦略を処理する方法 Jun 17, 2023 am 08:12 AM

API の使用がますます普及するにつれて、API の開発および使用中にデータの例外とエラーの処理戦略も考慮する必要があります。この記事では、API を実装するときに PHP がこれらの問題をどのように処理するかを説明します。 1. データ異常の処理 データ異常には、ユーザー入力エラー、ネットワーク送信エラー、内部サーバーエラーなど、さまざまな理由が考えられます。 PHP で開発する場合、次のメソッドを使用してデータ例外を処理できます。適切な HTTP ステータス コードを返します。HTTP プロトコルでは、役立つ多くのステータス コードが定義されています。

PHPで例外を効果的に処理する方法(試して、キャッチ、最後に、スロー)? PHPで例外を効果的に処理する方法(試して、キャッチ、最後に、スロー)? Apr 05, 2025 am 12:03 AM

PHPでは、Try、Catch、最後にキーワードをスローすることにより、例外処理が達成されます。 1)TRYブロックは、例外をスローする可能性のあるコードを囲みます。 2)キャッチブロックは例外を処理します。 3)最後にブロックは、コードが常に実行されることを保証します。 4)スローは、例外を手動でスローするために使用されます。これらのメカニズムは、コードの堅牢性と保守性を向上させるのに役立ちます。

PHP 時間処理例外: エラーを返す時間 PHP 時間処理例外: エラーを返す時間 Mar 28, 2024 pm 01:51 PM

PHP 時間処理例外: 時間を返す際のエラー。特定のコード例が必要です。Web 開発では、時間処理は非常に一般的な要件です。一般的に使用されるサーバー側スクリプト言語として、PHP は豊富な時間処理関数とメソッドを提供します。ただし、実際のアプリケーションでは、コード内のエラーや不適切な使用が原因で、戻り時間が間違っているという異常な状況に遭遇することがあります。この記事では、戻り時間エラーを引き起こす可能性のあるいくつかの一般的な状況を紹介し、読者の理解を深めるためにいくつかの具体的なコード例を示します。

See all articles