2012-03-19 8 views
3

私はエラーを引き起こしているクラスにメソッドを持っています。私は私は本当に/したいと、ここでは例外をスローしたくないドキュメンテーションのエラータグ

/** 
* Get info 
* @return string|FALSE Info 
*/ 
public function getInfo() 
{ 
    if ($this->info) { 
     return $this->info; 
    } 

    trigger_error('Missing info', E_USER_WARNING); 
    return FALSE; 
} 

は実行を継続するために、このコードが必要です。他の場所では、このエラーがログに記録され、ロギングエラーはこのクラスの範囲外です。

これをどのように文書化すればよいですか?例外として、私は次のものを使用します:

/** 
* @throws Exception 
*/ 

何か似たようなエラーがありますか?他の開発者が私のコードで何が起こっているのかを簡単に知りたいと思っています。

+1

少しずつ:多くのプログラマーは、ユーザーの警告をエラーとしてみなしています。例外とは対照的に、通知は[ローカル]に捕まえることができませんでした。だから...エラーを文書化するのが奇妙に思える。 – kirilloid

答えて

0

ここでコーディングアプローチを変更することに同意しますが、直接質問おそらく@内部タグを使用して、の開発者が知りたいと思うことを説明します。このコードに対してphpDocumentorを実行すると、--parse-privateランタイムオプションを使用しない限り、@internalタグは生成されたドキュメントに表示されません...これはinternal-info-for-devsがオフであると推定されるためです"@access private"のような消費者/ APIに興味のある読者には限界があります。

+0

ありがとうございます。これは私の元の質問に最もよく答えます。しかし、私はアドバイスを受け取り、コードを再設計しているので、エラーはまったく引き起こされません。 – Aine

1

エラーのためのphpdocタグはありません。

trigger_error()はboolを返します。したがって、あなたのメソッドは何も返さないか、何も投げていません。あなたのエラーハンドラがそれを防ぐことができないかぎり、実行が再開されるので、@returnや@throwsを使うことはそれらを悪用し、おそらくあなたのコードを読んでいる人に混乱させるでしょう。


私は別の方法を使用します。

/** 
* Has info 
* 
* @return bool Whether info is available 
*/ 
public function hasInfo() 
{ 
    return (bool) $this->info; // or use isset() or whatever you need 
} 

/** 
* Get info 
* 
* @throws Exception 
* @return string The info string 
*/ 
public function getInfo() 
{ 
    if (! $this->hasInfo()) { 
     throw new Exception('Missing info'); 
    } 

    return $this->info; 
} 

してから他のコードから、あなたが行うことができます:

これは、私はそれを行うだろうかある

if ($object->hasInfo()) { 
    $info = $object->getInfo(); 
} else { 
    // no info! 
} 

私も私のコードベースのルートで例外をキャッチします。

try { 
    MyApp::run(); 
} 
catch(Exception $e) { 
    // handle error, eg. display fatal error message 
} 
+0

私はあなたがどこから来ているのか理解しています。通常、私はこのアプローチを使用します。しかし、この場合は、情報をビューのようなものに出力しています。例外をスローすると、エラーページが表示されます。ユーザーが使用可能な情報を取得するので、情報のFALSEを返す方が良いです。しかし、私は情報が設定されていないかどうかを知りたい(そして修正したい)。 – Aine

+0

これは 'hasInfo()'メソッドが(2番目のコードブロックで)のためのものです。情報が設定されていない場合、それを呼び出す場所、ビュー、またはコントローラ、またはビューヘルパーを扱うことができます。 – jmlnik

関連する問題