例外 それらを使用する場所

「例外を正しく使用する方法」を読んでコメントした後、例外を使用する短い記事を書くことにしました。「正しく」する方法ではなく、すべてが経験に基づいて簡潔かつ簡潔に説明します。





ロジック



  1. データの検証:言い換えると、入力データのエラー、フィールドの形式が同じではなく、フィールドが入力されていない、フィールドの一意性のエラーが入力データのすべてのエラーである場合、そのような場合、ユーザーに表示されるすべてのフィールドとエラーをリストする実行をドロップします。
  2. 404ドキュメントが見つかりませんでした:特定のエンティティ(たとえば、データベースからの行)がその識別子によって(だけでなく)要求された場合、存在しない場合、実行がスローされ、後でページ404に変わります。
  3. 403アクセスが拒否されました:アクセスできないユーザーにアクセスしようとした場合、実行がスローされ(アクセスできない理由を引数に渡すことができます)、後で403に変わります。
  4. 401認証が必要:ユーザーは認証が必要なデータを要求します。 実行を破棄し(引数でRelarm-承認要求のテキストを渡すことができます)、ユーザーはHTTP承認の要求または通常のフォームを受け取ります。
  5. 301リダイレクト:リダイレクトする必要がありますか? 実行をスローします-その中で、リダイレクトする必要がある場所に転送します。


間違い



  1. 致命的なエラー:ここではすべてが明らかであるか、データベースへの接続がないか、構成を読み取ることができません。 ログに書き込み、損傷を表示するだけです。
  2. 重大なエラー:たとえば:SMSkaが送信されず、ファイルをアップロードできません-特定の実行をスローします。 そして、適切な場所(たとえば、電話の確認)で、それを処理し、SMSを送信できないことをユーザーに書き込みます。


デバッグ



デバッグモードでは、 PHP_Exceptionizerを使用しますここで説明します )。 コードをきれいにし、通知や警告を受信に変えることができます。これにより、それらを見逃すことがなくなります。 当然、これはデバッグモードでのみ有効になります。





また、「誤解された」すべての実行を記録することをお勧めします。



class Controller_Front

{

//

public function execute()

{

try {

...

//

try {

... //

// .

throw new Controller_RedirectException( 'http://habr.ru' );

...

} catch (Controller_DataException $e) {

//

$ this ->errors = $e->getErrors();

}

...

} catch (Controller_RedirectException $e) {

// ,

$ this ->_processRedirectException($e);

} catch (Controller_AuthException $e) {

// , HTTP

$ this ->_processAuthException($e);

} catch (Exception $e) {

// .

$ this ->_logException($e);

// .

$ this ->_processFatalException($e);

}

}

}




* This source code was highlighted with Source Code Highlighter .








これまでのところ、PHPブログに転送するのに十分なカルマはありません。 転送されたカルマをありがとう。




All Articles