PHP 6 .moduleファイルにDrupal関数があります。より集中的なタスク(データベースクエリなど)を実行する前に、初期変数検証を実行しようとしています。 C#では、Tryブロックの先頭に、検証が失敗した場合に新しい例外をスローするIFステートメントを実装していました。スローされた例外は、Catchブロックでキャッチされます。以下は私のPHPコードです:
function _modulename_getData($field, $table) {
try {
if (empty($field)) {
throw new Exception("The field is undefined.");
}
// rest of code here...
}
catch (Exception $e) {
throw $e->getMessage();
}
}
ただし、コードを実行しようとすると、オブジェクトはCatchブロック内でしかスローできないことがわかります。
前もって感謝します!
function _modulename_getData($field, $table) {
try {
if (empty($field)) {
throw new Exception("The field is undefined.");
}
// rest of code here...
}
catch (Exception $e) {
/*
Here you can either echo the exception message like:
echo $e->getMessage();
Or you can throw the Exception Object $e like:
throw $e;
*/
}
}
再実行するには
throw $e;
メッセージではありません。
Catchブロックからthrow
を削除するだけで、echo
に変更するか、エラーを処理します。
オブジェクトはcatchブロックでのみスローできることを示しているのではなく、オブジェクトのみがスローできること、エラーの場所はcatchブロックにあることを示しています。違いがあります。
Catchブロックでは、キャッチしたもの(このコンテキストではとにかく意味をなさないもの)をスローしようとしていますが、スローしようとしているのは文字列です。
あなたがしていることの現実世界の例えは、ボールをキャッチし、メーカーのロゴだけを別の場所に投げ込もうとすることです。オブジェクトのプロパティではなく、オブジェクト全体のみをスローできます。
throw $e->getMessage();
string
をスローしようとしました
補足:例外は通常、検証後のエラーメッセージではなく、アプリケーションの例外的な状態を定義することです。ユーザーが無効なデータを提供した場合も例外ではありません
スローには、\Exception
によってインスタンス化されたオブジェクトが必要です。キャッチされた$e
だけがトリックを再生できます。
throw $e