0

私は何かをするクラスを持っていて、それが行われるとそれは戻りますtrueが、さまざまなことがうまくいかない場合は戻りfalseます。ここで私の質問は、そのようなイベントのステータスメッセージをクラス内(例1)またはクラス外(例2)に保持する必要があるかどうかです。クラスは、何が起こったかを区別するのに役立つエラーコードのみを提供する可能性があります。

    class Example1 {

       private $var;
       private $status;

       public function doSomething($var) {
         $this->var = $var;

         if (!is_numeric($this->var)) { 
            $this->status = 'Please provide a number'; 
            return false; 
         }

         if (empty($this->var)) {
            $this->status = 'Please fill the field';
            return false;
         }

         $this->status = 'Ok, you submitted a number, cool.';
         return true;
    } 

         function getStatus() {
            return $this->status;
         }
}

例2:

    class Example2 {

       private $var;

       public function doSomething($var) {
         $this->var = $var;

         if (!is_numeric($this->var)) {  
            return false; 
         }

         if (empty($this->var)) {
                return false;
         }

             return true;
    } 

}

例1の方が使い勝手がよく、コードは詩のように読めますが、同時に、クラスの用途によっては、成功/エラーメッセージの構文を変えたい場合があります。

だから基本的に私の質問は通常の習慣は何ですか?

4

3 に答える 3

1

最初の例:エラーメッセージをハードコーディングします。これは...悪いです。$object->statusまた、後で確認しないと、エラーメッセージは表示されません。
2番目の例:何かがうまくいかない場合、あなたはそれを知っていますが、理由はわかりません。

これらの両方の方法を避け、よりオブジェクト指向のアプローチのために例外をスローすることをお勧めします(クラスを使用しているので、それが必要なことだと思います:)。

于 2012-05-22T17:49:36.577 に答える
1

それは完全にあなた次第です。エラーメッセージが理解しやすく、コードのデバッグに役立つ場合は、ぜひそれを試してみてください。さまざまなエラーのエラーコードを考え出すと、ユーザーから真のエラーを隠したい場合を除いて、開発プロセスが遅くなる可能性があります(ただし、その場合、いくつかのオプションがあります。その1つは、エラーを画面に出力しないことです。ユーザーはそれらを見るかもしれません)。

于 2012-05-22T17:50:36.643 に答える
1

それはあなたが求めていることではありませんが、1つの関数に複数のreturnステートメントを含めることは一般的に悪い習慣と考えられています。問題は、関数をどこで終了するかがわかりにくくなり、何が実行されるかが明確にならないことです。あなたの例では、最初のテストが成功した場合、残りのコードは実行されません。後でいくつかの属性を設定するとどうなりますか?設定されることもあれば、設定されないこともあります。この問題を取り除くには、returnステートメントを1つだけ持つ方がよいでしょう。より多くのコードが実行され、それに慣れるには、コーディング方法を少し変更する必要があります。

これが私が意味する例です、あなたが提供するコードで:

public function doSomething($var) {
     $this->var = $var;
    $result = false;
     if (!is_numeric($this->var)) { 
        $this->status = 'Please provide a number';  
     }
     else if (empty($this->var)) {
        $this->status = 'Please fill the field';
     }
     else{
        $this->status = 'Ok, you submitted a number, cool.';
        $result = true;
    }
     return $result;
} 
于 2012-05-22T18:11:21.103 に答える