2017-07-06 20 views
0

いくつかの統計関数を管理するためにPHPクラスを作成しましたが、最小限の要素、つまり> 0を必要とする関数があります。 私はtry catchを追加しましたが、私はまだ同じエラーが発生します。単純な例外を適切に処理できません

/** 
* Calculates the minimum for a given set of values. 
* 
* @param array $values The input values 
* @return float|int The minimum of values as an integer or float 
*/ 
public static function min($values) 
{ 
    try { 
     min($values); 
    } catch (Exception $e) { 
     return 0; 
    } 
} 

そして私が手:事前に

ErrorException in Statistics.php line 41: min(): Array must contain at least one element 

感謝を。

答えて

1
public static function min($values) 
{ 
    if (count($values) < 1) { 
     return 0; 
    } 

    return min($values); 
} 

配列が空のときに0を返すように探している場合は、簡単なif文は十分です。個人的には、私自身のmin関数を組み込み関数とは違って処理する代わりに、この問題をスタック上で扱うことにしました。

+0

ありがとう、私は使用している回避策が、例外を使用する方が良いと思った。 –

0

ErrorExceptionがあなたのフレームワークによってスローされています。 (Can I try/catch a warning?ようなもの)

通常、分min() docs当たりようWarning

をトリガ:

分()は、標準的な比較による "最低" とみなさパラメータ値を返します。異なるタイプの複数の値が等しいと評価された場合(たとえば、0および 'abc')、関数に最初に提供された値が返されます。空の配列をを渡された場合

、次にFALSEが戻されるとE_WARNINGエラーが放出されます。

あなたの場合、$valuesは空の配列です。

ことを避けるために、あなたがこれを使用することができます:

public static function min($values) 
{ 
    if (empty($values)){ 
     return null; // better than 0. 0 is a valid minimum 
    } 

    return min($values); 
} 
+0

これは別の答えとして行くようです。たぶん、私はそれよりはるかに複雑なものを探していたかもしれません。 –

0

私はLaravelをアレックスとして使用しているので、このExceptionを処理するためにExceptionを使用していませんでした。 その後、私はそのエラーをキャッチすることができました。 皆さん、ありがとうございます

+0

あなたは解決策を記入するために自分の質問への回答を投稿する必要はありません。あなたは問題を解決する答えをupvoteしたり受け入れたりする必要があります; –

+1

@MarcoSantana問題を発見したことは素晴らしいことですが、このように例外を使用しないようにアドバイスしてください。このメソッドの動作は、配列が空の場合は0を返しますが、エラーの発生を許可している配列の長さをチェックしてから、エラーをキャッチします。例外は、メソッドのロジックフローが壊れている場合にスロー/処理されることを意味します。このインスタンスでは、実際にはエラーを「期待」していますが、これはコードの非効率性を(おそらく小さいが、それでもかなり悪い)導入します。 – Flosculus

+0

ありがとうございます –

関連する問題