PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPスロー例外


はじめに

スロー可能なインターフェイスは、ErrorクラスとExceptionクラスによって実装されます。事前定義されたすべてのエラークラスは、エラークラスから継承されます。対応するErrorクラスのインスタンスは、tryブロック内でスローされ、適切なcatchブロック内で処理されます。

スローエラー

通常の実行(tryブロック内で例外がスローされない場合)は、順番に定義された最後のcatchブロックの後で続行されます。

<?php
function div($x, $y) {
   if (!$y) {
      throw new Exception('Division by zero.');
   }
return $x/$y;
}
try {
   echo div(10,5) . "\n";
   echo div(10,0) . "\n";
} catch (Exception $e) {
   echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo "Execution continues\n";
?>
>

出力

次の出力が表示されます

2
Caught exception: Division by zero.
Execution continues

次の例では、 TypeError 適切な引数が関数に渡されないため、関数の実行中にスローされます。対応するエラーメッセージが表示されます

<?php
function add(int $num1, int $num2){
   return $num1 + $num2;
}
try {
   $value = add(1, 'one');
} catch (TypeError $e) {
   echo $e->getMessage(). "\n";
}
?>

出力

次の出力が表示されます

Argument 2 passed to add() must be of the type integer, string given

SPL例外

標準のPHPライブラリには事前定義された例外が含まれています

LogicException プログラムロジックのエラーを表す例外。
BadFunctionCallException コールバックが未定義の関数を参照している場合、または一部の引数が欠落している場合にスローされる例外。
BadMethodCallException コールバックが未定義のメソッドを参照している場合、または一部の引数が欠落している場合にスローされる例外。
DomainException 値が定義された有効なデータドメインに準拠していない場合にスローされる例外。
InvalidArgumentException 引数が予期されたタイプでない場合にスローされる例外。
LengthException 長さが無効な場合にスローされる例外。
OutOfRangeException 不正なインデックスが要求されたときにスローされる例外。
RuntimeException 実行時にのみ検出できるエラーが発生した場合にスローされる例外。
OutOfBoundsException 値が有効なキーでない場合にスローされる例外。
オーバーフロー例外 完全なコンテナに要素を追加すると例外がスローされます。
RangeException プログラム実行中の範囲エラーを示すためにスローされる例外。アンダー/オーバーフロー以外の算術エラー。
UnderflowException 要素の削除など、空のコンテナで無効な操作を実行すると例外がスローされます。
UnexpectedValueException 値が値のセットと一致しない場合にスローされる例外。

次の例は、 OutOfBoundsExceptionを示しています PHP配列のキーが見つからない場合にスローされます

<?php
$arr=array("one"=>1, "two"=>2,"three"=>3,"four"=>4);
$key="ten";
try{
   if (array_key_exists($key, $arr)==FALSE){
      throw new OutOfBoundsException("key not found");}
   else {
      echo $arr[$key];}
   }
   catch (OutOfBoundsException $e){
      echo $e->getMessage(). "\n";
}
?>

出力

次の出力が表示されます

key not found

  1. Pryでの例外の処理

    あなたが私のようなら、あなたはRailsコンソールをよく使います。そして今では、PryがRailsコンソールに起こる最良のことであることに誰もが同意していると思います...まあ、これまで。 組み込みのこじ開けは、昔ながらのIRBに比べて、例外を除いて作業をはるかに簡単にするいくつかの非常に優れた機能です。 完全なバックトレースを表示 Pry(またはそのことについてはIRB)で例外が発生すると、バックトレースの短縮バージョンが表示されます。通常はこれで十分ですが、常にそうとは限りません。 pryでは、wtf -vコマンドを使用して、最新の例外の完全なバックトレースを確認できます。 -vフラ

  2. Rubyのカスタム例外

    Rubyで独自の例外を作成するのは簡単です。次の手順に従ってください: 1。新しいクラスを作成する 例外は、Rubyの他のすべてと同じように、クラスです。新しい種類の例外を作成するには、StandardErrorまたはその子の1つから継承するクラスを作成するだけです。 class MyError < StandardError end raise MyError 慣例により、新しい例外のクラス名は「エラー」で終わります。カスタム例外をモジュール内に配置することもお勧めします。つまり、最終的なエラークラスは次のようになります:ActiveRecord::RecordNotFound