2017-10-10 6 views
4

次のスニペットと仮定します。dependency::bar()場合例外はいつ文書化する必要がありますか?

public function foo() 
{ 
    return $this->dependency->bar(); 
} 

は、例外をスローすることが知られているが、foo()はそれを処理することが期待されていません。 foo()には@throwsのエントリがありますか?それとも暗黙のはずですか?これについては、phpdocのドキュメントはやや曖昧です。

dependencyがインターフェイスに基づいて噴射されると仮定します。インターフェイスは、メソッド指定された例外をスローすることができることを文書化する必要があります。例外は、呼び出し元のコードで処理されなければならないか、その状況とは無関係である場合

それが重要ですか?

セマンティクスのすべての方法:)

+1

他の言語(java)では、関数の本体でスローされる(および処理されない)例外を明示的に定義することが必須です。コールスタックの例外を遠くに処理すると、少しでも苦痛に思えるかもしれませんが、情報を追加することで傷つけることはありません。 (この特定のケースでは、あなたが言ったように、fooは例外を処理しておらず、fooは呼び出し元がそれを扱うかどうかわからないので、fooに注意してください) – Gerard

+1

'$ this-> dependency - > bar() 'は、ドキュメントの呼び出し側および/またはパーサーが知らない/内部的な実装の詳細です。例外を文書化することがキャッチ可能にする唯一の方法です。 PhpStormを使用する場合、 – deceze

+0

btw - IDEは@throwsエントリにこのような例外を設けることを推奨します。 –

答えて

2

あなたは、いくつかの場合に例外をスローすることができますパブリック関数(誰もがそれを使用することができます)作成している - ので、あなたは間違いなくあなたのdocblockで@throwsエントリを持っている必要があります。
あなたの依存関係から例外がスローされた場合 - これは内部実装であり、カプセル化されています - したがって、あなたの関数を使用する人はあなたの関数から何が期待できるのか分かりません。インタフェース・インジェクションの場合

- それは、クラスやインタフェースの行動の一部だ例外は、すべての可能な振る舞いを記述しなければならないため、インターフェイスは、すべての例外を記述しなければなりません。

try-catchブロックがあり、依存関係からすべての例外を処理する場合は、自分の例外をドキュメントブロックの@throwsエントリに含める必要があります。

+0

明確にするために、エラーを捕まえて再現してもらえますか? – Timo

+0

@Timoはい、あなたはそれを行うことができ、例外を '@ throws'ブロックに記述する必要があります。 –

関連する問題