TECH I.S.

PHPの例外


例外とは何ですか?

例外は、PHPスクリプトのエラーまたは予期しない動作を説明するオブジェクトです。

例外は、多くのPHP関数およびクラスによってスローされます。

ユーザー定義の関数とクラスも例外をスローできます。

例外は、関数が使用できないデータに遭遇したときに関数を停止する良い方法です。


例外のスロー

throwステートメントを使用すると、ユーザー定義の関数またはメソッドで例外をスローできます。例外がスローされると、その後のコードは実行されません。

例外がキャッチされない場合、「Uncaught Exception」メッセージとともに致命的なエラーが発生します。

キャッチせずに例外をスローしてみましょう。

<?php function divide($dividend, $divisor) {   if($divisor == 0) {     throw new Exception("Division by zero");   }   return $dividend / $divisor; } echo divide(5, 0); ?>

結果は次のようになります。

<div> <b>Fatal error</b>: <strong>Uncaught Exception</strong>: Division by zero in C:\webfolder\test.php:4 Stack trace: #0 C:\webfolder\test.php(9): divide(5, 0) #1 {main} thrown in <b>C:\webfolder\test.php</b> on line <b>4</b> </div>

try...catch ステートメント

上記の例のエラーを回避するには、try...catchステートメントを使用して例外をキャッチし、プロセスを続行します。

構文

<div> try {   code that can throw exceptions } catch(Exception $e) {   code that runs when an exception is caught }</div>

例外がスローされたときにメッセージを表示します。

<?php function divide($dividend, $divisor) {   if($divisor == 0) {     throw new Exception("Division by zero");   }   return $dividend / $divisor; } try {   echo divide(5, 0); } catch(Exception $e) {   echo "Unable to divide."; } ?>

catchブロックは、キャッチすべき例外の型と、その例外にアクセスするための変数名を示す。上の例では、例外の型はExceptionで、変数名は $eです。

try...catch...finally ステートメント

try...catch...finally文は、例外をキャッチするために使うことができる。finallyブロック内のコードは、例外がキャッチされたかどうかにかかわらず、常に実行される。finallyがある場合、catchブロックは省略可能です。

構文

<div> try {   code that can throw exceptions } catch(Exception $e) {   code that runs when an exception is caught } finally {   code that always runs regardless of whether an exception was caught }</div>

例外がスローされたときにメッセージを表示し、プロセスが終了したことを示します。

<?php function divide($dividend, $divisor) {   if($divisor == 0) {     throw new Exception("Division by zero");   }   return $dividend / $divisor; } try {   echo divide(5, 0); } catch(Exception $e) {   echo "Unable to divide. "; } finally {   echo "Process complete."; } ?>

例外がキャッチされなかった場合でも文字列を出力します。

<?php function divide($dividend, $divisor) {   if($divisor == 0) {     throw new Exception("Division by zero");   }   return $dividend / $divisor; } try {   echo divide(5, 0); } finally {   echo "Process complete."; } ?>


例外オブジェクト

例外オブジェクトには、関数で発生したエラーと予期しない動作に関する情報が含まれています。

構文

<div> new Exception(message, code, previous)</div>

パラメータ値

パラメータ

説明

message オプション。例外がスローされた理由を説明する文字列。
code オプション。この例外を同じタイプの他の例外と簡単に区別するために使用できる整数。
previous オプション。この例外が別の例外のcatchブロックでスローされた場合は、その例外をこのパラメーターに渡すことをお勧めします。

メソッド

例外をキャッチするときに、例外に関する情報を取得するために使用できるメソッドの一部を次の表に示します。


方法

説明

getMessage() 例外がスローされた理由を説明する文字列を返します。
getPrevious() この例外が別の例外によってトリガーされた場合、このメソッドは前の例外を返します。そうでない場合は、戻りますNULL
getCode() 例外コードを返します
getFile() 例外がスローされたファイルのフルパスを返します。
getLine() 例外をスローしたコード行の行番号を返します。

スローされた例外に関する情報を出力します。

<?php function divide($dividend, $divisor) {   if($divisor == 0) {     throw new Exception("Division by zero", 1);   }   return $dividend / $divisor; } try {   echo divide(5, 0); } catch(Exception $ex) {   $code = $ex->getCode();   $message = $ex->getMessage();   $file = $ex->getFile();   $line = $ex->getLine();   echo "Exception thrown in $file on line $line: [Code $code]   $message"; } ?>


完全な例外リファレンス

完全なリファレンスについては、PHP 例外リファレンスを参照して下さい。

リファレンスには、すべての例外メソッドの説明と例が含まれています。



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細