ホームページ >バックエンド開発 >PHPチュートリアル >PHPの例外処理クラスExceptionの使い方を詳しく解説

PHPの例外処理クラスExceptionの使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-06-30 09:37:597348ブラウズ

例外は、通常のプログラムの実行中に発生するさまざまな種類のエラーを処理するためによく使用されます。たとえば、データベースリンクを行う場合、データベース接続の失敗に対処する必要があります。例外を使用すると、プログラムの耐障害性が向上し、アプリケーションがより安定して堅牢になります。

例外の使用

PHP5 には、他の言語と同様の例外処理モジュールが追加されています。 PHP コードで生成された例外は、throw ステートメントでスローし、catch ステートメントでキャッチできます。例外処理が必要なコードは、発生する可能性のある例外をキャッチするために try コード ブロックに配置する必要があります。各試行は少なくとも 1 つの catch ブロックに対応します。複数のキャッチを使用して、さまざまなクラスによって生成された例外をキャッチします。 try ブロックが例外をスローしなくなった場合、またはスローされた例外に一致するキャッチが存在しない場合、PHP コードは最後のキャッチにジャンプした後、実行を続行します。もちろん、PHP では、catch ブロック内で例外を再度スローすることができます。

事前定義された例外

ExceptionException クラスはすべての例外の基本クラスであり、Exception クラスを派生することでカスタム例外の目的を達成できます。次のリストは、例外に関する基本情報を示しています。

Exception {
    /* 属性 */
    protected string $message ;        //异常消息内容
    protected int $code ;            //异常代码
    protected string $file ;        //抛出异常的文件名
    protected int $line ;            //抛出异常在该文件中的行号
    /* 方法 */
    public construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )    //异常
构造函数
    final public string getMessage ( void )            //获取异常消息内容
    final public Exception getPrevious ( void )        //返回异常链中的前一个异常
    final public int getCode ( void )                //获取异常代码
    final public string getFile ( void )            //获取发生异常的程序文件名称
    final public int getLine ( void )                //获取发生异常的代码在文件中的行号
    final public array getTrace ( void )            //获取异常追踪信息
    final public string getTraceAsString ( void )    //获取字符串类型的异常追踪信息
    public string toString ( void )                //将异常对象转换为字符串
    final private void clone ( void )                //异常克隆
}

例外を理解したら、例外クラスを拡張してカスタム例外を実装してみましょう。

function connectToDatabase()
{    
    if(!$link = mysql_connect("myhost","myuser","mypassw","mybd"))
    {
        throw new Exception("could not connect to the database.");
    }
}
try
{
    connectToDatabase();
}
catch(Exception $e)
{echo $e->getMessage();
}

ここでは、Exception タイプの例外をスローし、この例外を catch でキャッチし、最後に「データベースに接続できませんでした。」を出力します。データベース接続が失敗した理由に関する情報も表示したい場合があります。次に、例外クラスを拡張してカスタム情報を実装します。

class MyException extends Exception
{
    protected $ErrorInfo;
    //构造函里处理一些逻辑,然后将一些信息传递给基类
    public function construct($message=null,$code=0)
    {
        $this->ErrorInfo = '自定义错误类的错误信息';
        parent::construct($message,$code);
    }    
    //提供获取自定义类信息的方法
    public function GetErrorInfo()
    {
        return $this->ErrorInfo;
    }
    /**
     *
     *这里还可以添加异常日志,只需在上面的构造函数里调用就可以了
     *
     */
    public function log($file)
    {
        
file_put_contents($fiel,$this->toString(),FILE_APPEND);
    }
}
function connectToDatabase()
{    
    throw new MyException("ErrorMessage");
}
try
{    
    connectToDatabase();
}
catch(MyException $e)
{    
    echo $e->getMessage() . "\n";
    echo $e->GetErrorInfo();
}

set_Exception_handler

ユーザー定義の例外処理関数を設定します。 キャッチされなかった例外が発生したときに呼び出される関数の名前を set_Exception_handler のパラメータとして指定します。この関数は、set_Exception_handler() を呼び出す前に定義する必要があります。この関数は、スローされた例外オブジェクトである 1 つのパラメーターを受け入れます。これを使用すると、前述の例外ログの処理を改善できます。

function ExceptionLogger($exception)
{
    $file='ExceptionLog.log';
    file_put_contents($fiel,$exception->toString(),FILE_APPEND);
}
set_exception_handler(ExceptionLogger);

1.3. PHP では、catch コード ブロック内で例外を再度スローできます。

try
{
    #code...
}
catch(Exception $e)
{
    if($e->getCode() == 999)
    {
        #进行一些操作
    }
    else
    {
        throw $e;
    }
}

まとめ

例外関数は非常に強力ですが、プロジェクト内で例外メカニズム、特にシステムのオーバーヘッドと大幅に増加する大量の例外ログを使用するメカニズムをむやみに悪用できるという意味ではありません。アプリケーションのパフォーマンスが低下します。エラー コードを使用すると、エラー メッセージを簡単に管理できます。エラー メッセージが複数回スローされる場合、エラー コードを使用するのが科学的な選択です。エラー コードを使用して、エラー メッセージを複数の言語で表示することもできます。

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

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