Exception オブジェクトを作成した後、そのオブジェクトを返すことができますが、この方法では代わりに throw キーワードを使用することをお勧めします。 throw は例外をスローするために使用されます:
throw new Exception("私のメッセージ", 44 );
Throw はスクリプトの実行を中止し、関連する Exception オブジェクトをクライアント コードで使用できるようにします。
以下は、改良された getCommandObject() メソッドです:
Index_php5.php
// PHP5
require_once('cmd_php5/Command.php');
クラス CommandManager {
プライベート $cmdDir = "cmd_php5";
関数 getCommandObject($cmd) {
$path = "{$this->cmdDir}/{$cmd}.php";
if (!file_exists($path)) {
throw new Exception("Cannot find $path");
}
require_once $path;
if (!class_exists($cmd)) {
新しい例外をスローします("クラス $cmd が存在しません");
}
$class = 新しい ReflectionClass($cmd);
if (!$class->isSubclassOf(new ReflectionClass('Command'))) {
throw new Exception("$cmd is not a Command");
}
新しい $cmd();
を返します
}
}
?>
コードでは、PHP5 の Reflection API を使用して、指定されたクラスが Command タイプに属しているかどうかを判断します。このスクリプトを間違ったパスで実行すると、次のようなエラーが報告されます:
致命的なエラー: /home/xyz/BasicException.php:10 でメッセージ「command/xrealcommand.php が見つかりません」を含む例外「例外」がキャッチされません
スタックトレース:
#0 /home/xyz/BasicException.php(26):
CommandManager->getCommandObject('xrealcommand')
#1 {メイン}
/home/xyz/BasicException.php の 10 行目にスローされます
デフォルトでは、例外をスローすると致命的なエラーが発生します。これは、例外を使用するクラスには安全メカニズムが組み込まれていることを意味します。また、エラー フラグを使用するだけではそのような機能を持たせることはできません。エラー フラグの処理に失敗すると、スクリプトが間違った値で実行を続行するだけになります。