6

以下のメソッドを書いていた場合 (たとえば)、次のいずれかを行うことをお勧めします。

A: ドキュメントが存在しない場合、空の文字列を返しますか?

B:null値を返しますか?

多くの Java と戻り値の型を必要とする Java のメソッドを実行した結果、一貫した型を返すことがベスト プラクティスであるという印象を受けましたnull

DocumentClass
{
    public function getDir($documentId)
    {
        /* Code to get location of document  */
        return (file_exists($document) ? $document : '');
    }
}

if (!empty($documentClass->getDir(5))
{
    /* Do this */
}

値を返す方がよい場合、そのnull理由を説明できますか?

4

6 に答える 6

8

PHPコンベンション

ブール値を返しFALSEます。

OOPアプローチ

例外をスローします。また、dir_exitstsブール値(trueまたはfalse)のみを返すメソッド(または任意の他の名前)を使用する必要があります。そして、呼び出す前にそれを使用してくださいgetDir

これには実際には特定のルールはありません。それは完全にあなた次第です。

を返すPHPの方法に従い ますfalse

于 2012-08-15T13:14:04.657 に答える
2

この戻り値をどうしますか? これは、論理エラー、不正な入力、または単なるエッジケースを通知する必要がありますか?

どちらの「エラー」の場合でも、いくつかのフリンジ戻り値の代わりに例外を使用します。特に、PHP は型付けが弱い言語であり、(愚かにも​​) 記述された==式で NULL と '' を簡単に混在させることができるためです。

FALSEエッジケースの場合、おそらく返す値として固執します。私の考えでは、これは少し壊れたアプローチです (真に腹立たしい例については、このリンクを確認してください) が、少なくとも PHP では一般的なイディオムです。

于 2012-08-15T13:11:22.007 に答える
1

これには2つの一般的な戻り値があります:falseまたはnull

PHPの内部関数はfalse、恣意的な理由で好まれているようですが、個人的には、nullを表すのに適しているため、私は好みundefinedます。

補足:false(=== $ x)のテストは、 :)falseよりも少し入力が多くなります。is_null($x)

ただし、多くの場合、この戻り値を受け取るコードは、それに対して意味のあることを何もできません。これは、Javaの場合と同様に、例外をスローしてそのコードセグメントをスキップできる場合です。これは、エラー処理に便利なフロー制御メカニズムです。

于 2012-08-15T13:19:54.200 に答える
1

file_exists存在しないファイルに対してはFALSEを返します。

この方法で状態を変えることができます

if (false ! == $documentClass->getDir(5))
{
    /* Do this */
}

別 : is_readable

filename で指定されたファイルまたはディレクトリが存在し、読み取り可能であればTRUEを返し、それ以外の場合は FALSE を返します。

于 2012-08-15T13:12:31.580 に答える
0

質問がOOPに関するものであるように見えるので、nullオブジェクトを自分で作成することもできることに注意してください。そのパターンに関するこのウィキペディアのページには、たまたまディレクトリリスターを例として使用する「説明」が含まれています。 、男と女...

于 2012-08-15T14:04:39.563 に答える