1

「そのようなレコードが見つかりません」を返す関数のPHPでの最良の戻り値は何ですか?

質問のこの短縮された例を考えてみましょう:

function getLatestPostId()
{
    $postId = Db::latestPostId();
    return (is_null($postId)) ? null : $postId;
    // Is returning null the best option?
}

私の通常のアプローチは returnですが、関数の戻り値の型を可能な限りnull混合integernullています。

私が他の場所で読んだ関連原則:

  • 混合型を返さないでください (たとえば、ブール値が予期される場合は、null ではなく常にブール値を返します)。
  • 配列を返し、アイテムが見つからない場合は、空の配列を返します
4

5 に答える 5

3

null最新の投稿がなく、これが問題のある状況でない場合は、ここに戻っても基本的に問題はありません。混合型を返すことは、PHP のような言語の強みの 1 つです。乱用すると問題が発生する可能性がありますが、これは乱用ではなく私見です。

最も重要なことは、一貫性を保つことです。戻り値としてスカラーと配列を混ぜたり、プリミティブとオブジェクト型を混ぜたりしないでください。

理論的には、最新の投稿が常に存在すると想定されている場合、混合型を返すことはエラー状態を報告するメカニズムになります。その場合、状況が明確ではなくなり始め、例外をスローすることが適切になる可能性があります。

于 2013-07-18T08:58:22.880 に答える
1

実際にはアプリケーションに依存します。身分証明書は必要ですか?その場合、例外をスローします。アプリケーションは ID なしで機能しますか? 戻っnullて処理するだけです。

于 2013-07-18T09:08:33.367 に答える
1

データが見つかったときの「期待される戻り値の型」によって異なります。

  1. 通常は int (ID、カウントなど) を返す場合、bool 値 (存在する) は最初のケースでは null を返し、2 番目のケースでは false を返すので、次のようなものを使用して評価できます。if(!result)

  2. 通常配列を返す場合は、空の配列を返します。

意味があり、それに固執する限り、どのスタイルを使用してもかまいません。アプリケーション全体で一貫性があり、うまく機能する場合は問題ありません。

于 2013-07-18T08:57:48.870 に答える
0

( check value and type )の発明以来、===多くの PHP 独自の関数が戻りFALSE値または意図した値を返します。

その後、この構造を使用する習慣を身につければ、すべてうまくいくはずです

$x = function();
if ( $x === FALSE ) {
    // error situation
} else {
    // all is well proceed
}

もちろん、より良い方法は例外を使用することですthrow catch。次に、エラー状況で返されるデータ型は標準、つまり例外オブジェクトです。

function getLatestPostId()
{
    $postId = Db::latestPostId();
    if (is_null($postId))  {
        throw new Exception('PostId is not available');
    }
    return $postId;
}

.... 

try {
    $x = getLatestPostId();
    // code when postid is available goes here
}
catch Exception($e) {
    // when posyId is not available do this
}
于 2013-07-18T09:09:00.710 に答える