1

これは必ずしも PHP だけに当てはまるわけではありませんが、それは私の懸念事項です。

私は最近、いくつかの引数を取得し、さまざまな方法でその有効性をチェックするいくつかのチェック関数を作成しています。同様に、checkXmlString($xml) は、指定された文字列に整形式の xml ドキュメントが含まれているかどうかなどをチェックします。

問題は、これらの関数がブール値を返すか、例外をスローして成功時に何も返さないかです。

そう

function checkAbc($arg) { if ($arg is invalid) return false; else return true; }

というより

function checkAbc($arg) { if ($arg is invalid) throw new Exception(...); }
4

6 に答える 6

0

一般的にどの形式が好ましいかはよくわかりません。

一方では、エラーが発生した場合、有用なメッセージが必要なため、最終的には複雑な結果 (true/string) が返されるか、配列が返される (さらに醜い) ことになります。例外により、無料で提供されます。

一方、check...() という関数が例外をスローすることは期待されるべきではありません。「これは有効なものではない」ということが判明しても例外ではなく、エラーでもないからです。

3 番目の方法は「throwIfFalse」と呼ぶことですが、それも醜いです....

うーん....

考えられる解決策の 1 つ:

interface Checker {
  public function check();
  public function getMessage();
}
class WhateverChecker implements Checker { ... }

class ClientOfChecker {
  public function doStuff() {
     $checker = new Checker();
     if (! $checker->check() )
        throw new Exception($checker->getMessage());
  }
}

しかし、それは信じられないほど冗長に思えます。

于 2015-11-11T11:41:30.680 に答える
0

問題は、これらの関数がブール値を返すか、例外をスローして成功時に何も返さないかです。

例外を使用するよりも例外的な状況である場合を最初に特定します。あなたのケースは例外ではないようです.それは単なる条件ですので、条件のように扱います.正しいが特定の状況で失敗するような場合は、例外の使用を検討するよりもよく識別します。

これらの 2 つのリンクにアクセスして、例外の詳細を確認してください

PHP 5.3 での例外のベスト プラクティス

PHP 例外の入門書

于 2015-11-11T11:51:43.593 に答える