国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP開発における例外処理の基本チュートリアル

1.異常とは何ですか?

例外は、指定されたエラーが発生したときにスクリプトの通常のフローを変更するために使用されます。

PHP 5 は、新しいオブジェクト指向のエラー処理メソッドを提供します。

例外処理は、指定されたエラー (例外) 狀況が発生したときにスクリプトの通常のフローを変更するために使用されます。この狀況を例外と呼びます。

例外がトリガーされると、通常は次のことが起こります:

  • 現(xiàn)在のコードの狀態(tài)が保存されます

  • コードの実行が事前定義された (カスタム) 例外ハンドラー関數(shù)に切り替わります

  • 狀況に応じて、ハンドラー保存されたコード狀態(tài)からコード実行を再開したり、スクリプト実行を終了したり、コード內(nèi)の別の場所からスクリプト実行を継続したりすることができます

  • さまざまなエラー処理方法を示します:

  • 例外の基本的な使用方法

  • カスタム例外ハンドラー

  • 複數(shù)の例外

  • 例外を再スローする

  • トップレベルの例外ハンドラーを設定する

注: 例外はエラー狀況でのみ使用する必要があり、別の例外にジャンプするために使用する必要はありませんコード內(nèi)の指定された位置にあります。




2. 例外の基本的な使用法

例外がスローされると、後続のコードは実行を続行せず、PHP は一致する「キャッチ」コード ブロックを見つけようとします。 。

例外がキャッチされず、 set_Exception_handler() を使用して適切に処理されなかった場合、重大なエラー (致命的エラー) が発生し、「Uncaught Exception」エラー メッセージが出力されます。

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

コードは次のとおりです:

<?php
// 創(chuàng)建一個有異常處理的函數(shù)
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("Value must be 1 or below");
	}
	return true;
}
// 觸發(fā)異常
checkNum(2);
?>

次のような出力が得られます:

64.png


3、Try、throw and catch

上の例に見られるエラーを回避するには、例外を処理する適切なコードを作成する必要があります。

適切な例外処理コードには以下を含める必要があります:

  • Try - 例外を使用する関數(shù)は「try」コード ブロック內(nèi)に配置する必要があります。例外がトリガーされない場合、コードは通常どおり実行を続行します。ただし、例外がトリガーされると、例外がスローされます。

  • Throw - 例外をトリガーする方法を指定します。各「スロー」は少なくとも 1 つの「キャッチ」に対応する必要があります。

  • Catch - 「catch」コード ブロックは例外をキャッチし、例外情報を含むオブジェクトを作成します。

例外をトリガーしてみましょう:

コードは次のとおりです

<?php
// 創(chuàng)建一個有異常處理的函數(shù)
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("變量值必須小于等于 1");
	}
		return true;
}
	
// 在 try 塊 觸發(fā)異常
try
{
	checkNum(2);
	// 如果拋出異常,以下文本不會輸出
	echo '如果輸出該內(nèi)容,說明 $number 變量';
}
// 捕獲異常
catch(Exception $e)
{
	echo 'Message: ' .$e->getMessage();
}
?>

出力は右に示すとおりです

例の説明:

上記のコードは例外をスローし、それをキャッチします:

  • checkNum()関數(shù)を作成します。數(shù)値が 1 より大きいかどうかを検出します。その場合は、例外をスローします。

  • 「try」コードブロックで checkNum() 関數(shù)を呼び出します。

  • checkNum()関數(shù)で例外がスローされます。

  • 「catch」コード ブロックは例外を受け取り、例外情報を含むオブジェクト ($e) を作成します。

  • この例外オブジェクトから $e->getMessage() を呼び出して、この例外からのエラー メッセージを出力します。

ただし、「各スローはキャッチに対応する必要がある」という原則に従うために、見逃したエラーを処理する最上位の例外ハンドラーをセットアップできます。


4. カスタム例外クラスを作成する

カスタム例外ハンドラーの作成は非常に簡単です。 PHP で例外が発生したときに関數(shù)を呼び出すことができる特殊なクラスを作成しただけです。このクラスは例外クラスの拡張である必要があります。

このカスタム例外クラスは、PHP の例外クラスのすべてのプロパティを継承しており、カスタム関數(shù)を追加できます。

例外クラスの作成を開始します:

コードは次のとおりです

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 錯誤信息
		$errorMsg = '錯誤行號 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一個合法的 E-Mail 地址';
		return $errorMsg;
	}
}
$email = "someone@example...com";
try
{
	// 檢測郵箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是個不合法的郵箱地址,拋出異常
		throw new customException($email);
	}
}
catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>

出力結(jié)果は右の図に示されています

この新しいクラスは、古い例外クラスのコピーに、errorMessage( ) 関數(shù)。古いクラスのコピーであるため、古いクラスからプロパティとメソッドが継承され、getLine()、getFile()、getMessage() などの例外クラスのメソッドを使用できます。

例の説明:

上記のコードは例外をスローし、カスタム例外クラスを通じてそれをキャッチします:

  • CustomException() クラスは、古い例外クラスの拡張として作成されます。このようにして、古い例外クラスのすべてのプロパティとメソッドを継承します。

  • errorMessage()関數(shù)を作成します。電子メール アドレスが無効な場合、この関數(shù)はエラー メッセージを返します。

  • $email 変數(shù)を不正な電子メール アドレス文字列に設定します。

  • 電子メール アドレスが無効であるため、「try」コード ブロックを?qū)g行して例外をスローします。

  • 「catch」コードブロックは例外をキャッチし、エラーメッセージを表示します

5. 複數(shù)の例外

スクリプトに複數(shù)の例外を使用して、複數(shù)の狀況を検出できます。

複數(shù)の if..else コード ブロックまたは switch コード ブロックを使用したり、複數(shù)の例外をネストしたりできます。これらの例外は、異なる例外クラスを使用し、異なるエラー メッセージを返す可能性があります:

コードは次のとおりです

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 錯誤信息
		$errorMsg = '錯誤行號 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一個合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "someone@example.com";

try
{
	// 檢測郵箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是個不合法的郵箱地址,拋出異常
		throw new customException($email);
	}
	// 檢測 "example" 是否在郵箱地址中
	if(strpos($email, "example") !== FALSE)
	{
		throw new Exception("$email 是 example 郵箱");
	}
}
catch (customException $e)
{
	echo $e->errorMessage();
}
catch(Exception $e)
{
	echo $e->getMessage();
}
?>

インスタンスの説明:

上記のコードは 2 つの條件をテストし、條件のいずれかが true でない場合は、例外が発生します。

  • CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古い例外クラスのすべてのプロパティとメソッドを継承します。

  • errorMessage()関數(shù)を作成します。電子メール アドレスが無効な場合、この関數(shù)はエラー メッセージを返します。

  • $email 変數(shù)を、有効な電子メール アドレスであるが、文字列「example」を含む文字列に設定します。

  • 「try」コード ブロックを?qū)g行すると、最初の條件では例外はスローされません。

  • メールには「example」という文字列が含まれているため、2 番目の條件により例外がトリガーされます。

  • 「catch」コード ブロックは例外をキャッチし、適切なエラー メッセージを表示します。

customException クラスが例外をスローしたが、customException がキャッチされず、基本例外のみがキャッチされた場合、例外はそこで処理されます。


6. 例外を再スローする

例外がスローされたときに、標準の方法とは異なる方法で処理したい場合があります。例外は「catch」ブロックで再度スローできます。

スクリプトはシステムエラーをユーザーから隠す必要があります。システム エラーはプログラマにとって重要かもしれませんが、ユーザーはそれらに興味がありません。ユーザーが使いやすくするために、よりユーザーフレンドリーなメッセージを付けて例外を再度スローできます:

コードは次のとおりです

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 錯誤信息
		$errorMsg = $this->getMessage().' 不是一個合法的 E-Mail 地址。';
		return $errorMsg;
	}
}

$email = "someone@example.com";

try
{
	try
	{
		// 檢測 "example" 是否在郵箱地址中
		if(strpos($email, "example") !== FALSE)
		{
			// 如果是個不合法的郵箱地址,拋出異常
			throw new Exception($email);
		}
	}
	catch(Exception $e)
	{
		// 重新拋出異常
		throw new customException($email);
	}
}
catch (customException $e)
{
	// 顯示自定義信息
	echo $e->errorMessage();
}
?>

出力は右側(cè)に表示されます

例の説明:

上記のコードはメールアドレスを検出します?!竐xample」という文字列が含まれていますか?その場合は、再度例外をスローします:

  • CustomException() クラスは、古い例外クラスの拡張として作成されました。このようにして、古い例外クラスのすべてのプロパティとメソッドを継承します。

  • errorMessage() 関數(shù)を作成します。電子メール アドレスが無効な場合、この関數(shù)はエラー メッセージを返します。

  • $email 変數(shù)を、有効な電子メール アドレスであるが、文字列「example」を含む文字列に設定します。

  • "try" ブロックには、例外を再度スローできるように別の "try" ブロックが含まれています。

  • メールに「example」という文字列が含まれているため、例外がトリガーされます。

  • 「catch」コードブロックは例外をキャッチし、「customException」を再スローします。

  • 「customException」をキャッチし、エラーメッセージを表示します。

現(xiàn)在の「try」ブロックで例外がキャッチされない場合は、より高いレベルの catch ブロックを探します。


7. 最上位の例外ハンドラーを設定します

set_Exception_handler() 関數(shù)は、キャッチされなかった例外をすべて処理するユーザー定義関數(shù)を設定できます。

コードは次のとおりです

<?php
function myException($exception)
{
	echo "<b>Exception:</b> " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');
?>

出力は右側(cè)に表示されます

上記のコードには「catch」ブロックはなく、代わりにトップレベルの例外ハンドラーがトリガーされます。この関數(shù)は、キャッチされなかった例外をすべてキャッチするために使用する必要があります。


8. 例外ルール

  • 例外処理を必要とするコードは、潛在的な例外をキャッチするために try コード ブロックに配置する必要があります。

  • 各 try または throw コード ブロックには、対応する catch コード ブロックが少なくとも 1 つ必要です。

  • 複數(shù)の catch ブロックを使用して、さまざまな種類の例外をキャッチします。

  • 例外は、try ブロック內(nèi)の catch ブロックでスロー (再度スロー) できます。

つまり、例外がスローされた場合は、それをキャッチする必要があります。


學び続ける
||
<?php // 創(chuàng)建一個有異常處理的函數(shù) function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } // 觸發(fā)異常 checkNum(2); ?>