1

オブジェクトを使用する場合のエラー処理のベスト プラクティスは何ですか?

A)オブジェクトのメソッドが呼び出される前で、何らかのエラーが発生した場合にメソッドを実行することさえできない、または

B)パラメータを渡して、メソッド自体でエラー チェックを実行し、エラー コードなどを返すだけです。

オプションと簡単な説明を選択してください。理由を教えてください。

ありがとう orlandu63、それは良い習慣ですが、ユーザーが何かのタイトルを提供する必要があるのに、提供しなかったなどの致命的ではないエラーはどうですか?

class Sample {    

var $err_no_title = 1;

function createNewRecord ($title) {
       if (!$title) return $this->err_no_title;
    }
}

または、これらの種類のエラーにも例外を使用しますか?

4

2 に答える 2

3

オブジェクト指向を使用している場合は、例外を使用することもできます。私の答えは、A と B の両方を組み合わせたものです。

class DatabaseConnectionException extends Exception {}

class Database {
    public function connect($user, $pass, $db) {
        //Connection stuff.
        if($baduser) {
            throw new DatabaseConnectionException('Username (' . $user. ') is invalid.')
         }
         if($badpass) {
             //''
         }
    }
}

$db = new Database;
try {
    $db->connect($user, $pass, $db);
catch (DatabaseConnectionException $e) {
    die('I cannot connect to the database:' . $e);
}

これにはどのような利点がありますか?わかりませんが、正しいようです。

詳細については、http://php.net/exceptionsおよび google を参照してください。

第二部についてですが、

まず、関数を終了するため、タイトルがない場合はレコードを作成しないため、例では「警告」よりもエラーとして扱います。これは、方法 B に欠陥があることを示しています。したがって、方法Aはずっとです。

于 2009-01-11T20:47:43.157 に答える
0

提供するオプションから選択するには B になりますが、エラー コードを使用せず、代わりに例外をスローします。すべてのロジック (入力の検証も含む) を関数にカプセル化する必要があります。

理由は次のとおりです。

  1. 機能が変更される可能性があるため、入力の要件が変更される可能性があります。
  2. 関数のユーザーは、入力がどのようなものであるべきかを常に知っているとは限りません。
  3. 関数を使用するすべての場所で検証コードを繰り返したくないはずです。

ただし、例外はオブジェクト指向コードによってのみ発生するため、注意してください。たとえば、次のコードは例外を発生させません。

<?php  
  $number = $number / 0;
?>

あなたの例は次のようになります:

<?php
    class Sample {    
      function createNewRecord ($title) {
       if (!$title) throw new Exception('Title required');
      }
    }

    ...
    try {
      $mysample->createNewRecord($title);
    } catch ($ex) {
      echo "Could not create record. Please try again. (Reason: $ex)";
    }
    ...
?>

そもそも、このようなことはユーザー インターフェイスで検証する必要があります。つまり、A になりますが、B がそこにいる必要があります。したがって、最終的な評決は次のようになります。両方。

于 2009-01-11T21:03:58.663 に答える