亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

PHP例外処理

例外とは

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

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

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

·出てくる

アウト アウト アウト アウト アウト スルー スルー スルー スルー スルー スルー スルー スルー通過(guò)する通り、スルースルースルースルースルー - インツーウィットツーベースに移動(dòng)する場(chǎng)合、保存されたコードステータスが再びコードの実行を開(kāi)始し、スクリプトの実行を終了するか、または実行し続けます別の位置からスクリプトを?qū)g行します

さまざまなエラーを表示します:

· 異常使用の基本的な使用方法

· カスタム異常処理ハンドラーを作成する

·使う 使う 使う 使う 使う 使う アウト アウト アウト アウト スルー アウト スルー オフ オフ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ アウトスルースルーアウトを使用してアウト ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ 処理する

· - try、throw、catch 例外を使用できます。つまり、try を使用して、例外がスローされたかどうかを検出します。例外がスローされた場(chǎng)合は、catch を使用して例外をキャッチします。

try には、対応する catch が少なくとも 1 つ必要です。複數(shù)のキャッチを定義して、さまざまなオブジェクトをキャプチャします。 PHP は、最後のキャッチが完了するまで、定義された順序でこれらのキャッチを?qū)g行します。これらのキャッチ內(nèi)で、新しい例外がスローされる可能性があります。

注: 例外はエラー狀況でのみ使用する必要があり、コード內(nèi)の指定された位置で別の場(chǎng)所にジャンプするために使用しないでください。

例外の基本的な使用法

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


例外がキャッチされず、対応する処理に set_Exception_handler() を使用する必要がない場(chǎng)合、重大なエラー (致命的エラー) が発生し、「Uncaught Exception」エラーメッセージが出力されます。

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

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

上記のコードは次のようなエラーを受け取ります:

致命的なエラー: キャッチされない例外 '例外' とメッセージ '値は 1 以下である必要があります' in /www/php/ test/test.php:7 スタック トレース: #0 /www/php/test/test.php(13): checkNum(2) #1 {main} が /www/php/test/test.php の 7 行目にスローされました

試して、投げて、キャッチしてください

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

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

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

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

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

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

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

上記のコードは、次のようなエラーを受け取ります:

メッセージ: 変數(shù)値は 1 以下である必要があります

例の説明:

上記のコードは、例外を取得してキャッチする :

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

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

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

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

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

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


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

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

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

例外クラスを作成することから始めます:

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

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

例の説明:

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

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

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

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

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

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


複數(shù)の例外

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

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

<?php
class customException extends Exception
{
         public function errorMessage()
         {
                 // 錯(cuò)誤信息
                 $errorMsg = '錯(cuò)誤行號(hào) '.$this->getLine().' in '.$this->getFile()
                 .': <b>'.$this->getMessage().'</b> 不是一個(gè)合法的 E-Mail 地址';
                 return $errorMsg;
         }
}
 
$email = "123456789@qq.com ";
 
try
{
         // 檢測(cè)郵箱
         if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
         {
                 // 如果是個(gè)不合法的郵箱地址,拋出異常
                 throw new customException($email);
         }
         // 檢測(cè) "example" 是否在郵箱地址中
         if(strpos($email, "example") !== FALSE)
         {
                 throw new Exception("$email 是 example 郵箱");
         }
}
catch (customException $e)
{
         echo $e->errorMessage();
}
catch(Exception $e)
{
         echo $e->getMessage();
}
?>

例の説明:

上記のコードは、いずれかの條件が true でない場(chǎng)合、例外がスローされます。

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

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

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

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

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

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

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


例外の再スロー

例外がスローされたときに、標(biāo)準(zhǔn)の方法とは異なる方法で処理したい場(chǎng)合があります。例外は「catch」ブロックで再度スローできます。

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

<?php
class customException extends Exception
{
         public function errorMessage()
         {
                 // 錯(cuò)誤信息
                 $errorMsg = $this->getMessage().' 不是一個(gè)合法的 E-Mail 地址。';
                 return $errorMsg;
         }
}
 
$email = "someone@example.com";
 
try
{
         try
         {
                 // 檢測(cè) "example" 是否在郵箱地址中
                 if(strpos($email, "example") !== FALSE)
                 {
                          // 如果是個(gè)不合法的郵箱地址,拋出異常
                          throw new Exception($email);
                 }
         }
         catch(Exception $e)
         {
                 // 重新拋出異常
                 throw new customException($email);
         }
}
catch (customException $e)
{
         // 顯示自定義信息
         echo $e->errorMessage();
}
?>

説明:

上記のコードは、文字列「example」が電子メール アドレスに含まれているかどうかを検出します。その場(chǎng)合は、再度例外をスローします:

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

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

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

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

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

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

7.「customException」がキャッチされ、エラーメッセージが表示されます。

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


最上位の例外ハンドラーを設(shè)定します

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

<?php
function myException($exception)
{
         echo "<b>Exception:</b> " , $exception->getMessage();
}
 
set_exception_handler('myException');
 
throw new Exception('Uncaught Exception occurred');
?>

上記のコードの出力は次のようになります:

例外: キャッチされない例外が発生しました

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

基本構(gòu)文:

try{

}catch(){

}

try catch は 1 つの本體です

try catch の間にコードを含めることはできません。

1. try のコードに問(wèn)題がない場(chǎng)合は、try のコードを?qū)g行した後、catch をスキップして続行します。

2. try のコードが異常である場(chǎng)合は、例外オブジェクトをスローします。 catch 內(nèi)のパラメータがスローされると、try 內(nèi)のコードは実行されなくなり、catch に直接ジャンプして一度に実行されます。

3. catch はどのような例外が発生したかを?qū)い亭蓼工?、これが重要ではありません。解決できない場(chǎng)合は、渡された例外がユーザーに出力されます。

例外クラス:

組み込み例外クラス (リファレンスマニュアル)

カスタマイズされた例外クラス:

1. 獨(dú)自の例外クラスを定義します。これは組み込みクラス Exception のサブクラスである必要があります。コンストラクターと tostring () のみがオーバーライドでき、その他はすべて Final キーワードで変更されます。

例:

 <?php
class openfileException{  
         function open(){  
                touch("pb160.txt","r");  
                $file=fopen("pb160.txt","r");  
                  return $file;  
       }  
  }  
 try{  
       echo "你好,我是pb!";  
         $file=@open("pp.txt","r");  
        if(!$file)  
          throw new openfileException("打開(kāi)文件失敗啦!");  
        echo "打開(kāi)文件成功時(shí)可以看到我!";  
 }catch(openfileException $e){  
        echo $e->getMessage()."<br>";  
        $file=$e->open();  
 }  
  echo "再見(jiàn)了啊!";  
?>

獨(dú)自の例外クラスを作成する目的は、発生した例外を解決するための 1 つ以上のメソッドを作成することです。

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

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

· 複數(shù)の catch コード ブロックを使用して、さまざまな種類(lèi)の例外をキャッチします。

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

要するに: 例外がスローされた場(chǎng)合は、それをキャッチする必要があります。

學(xué)び続ける
||
<?php // 創(chuàng)建一個(gè)有異常處理的函數(shù) function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } // 觸發(fā)異常 checkNum(2); ?>
提出するリセットコード