0

多くの理由で false を返す関数があります。true または false であることに依存する他のコードを壊すことなく、キャッチ可能なエラーをスローすることも可能ですか?

または、配列を返すか、エラーの理由を返して、成功した場合にのみ true にする必要がありますか?

これに対する最善のアプローチは何ですか?

ダニエルのアプローチに基づくいくつかのアイデア:

__FUNCTION__ は関数名を返す必要があります

$errors = array();
function someFunction(){
    if(ErrorTWOhappened()){
        global $errors[__FUNCTION__] = "ERRORtwo";
        return false;
    }
    if(someOtherError()){
        global $errors[__FUNCTION__] = "someOtherError";
        return false;
    }
    return true;
}
if(!someFunction())echo $errors['someFunction'];
4

1 に答える 1

1

下位互換性を壊さずに、より多くの情報を提供するために、エラー メッセージをログに記録する 2 つ目の関数を作成できます。手続き的なアプローチでは、これは次のようになります。

$myFunctionErrors = array();
function myFunctionSetError($error) {
    global $myFunctionErrors;
    $myFunctionsErrors[] = $error;
}

function myFunctionGetErrors() {
    global $myFunctionErrors;
    return $myFunctionErrors;
}

そしてmyFunctionSetError('whatever');、既存の関数内で呼び出すだけです。myFunctionは単なる接頭辞であり、実際の機能にちなんで名付けてください。

また、注意してください:明らかに配列を直接使用できます。ただし、保守性を高めるために、後で変更できる関数を使用して、その背後にあるロジックを簡単に変更することをお勧めします。

$myFunctionErrorsオブジェクト指向のアプローチを好む場合は、そのためのクラスを設定して、グローバル変数に関する副作用を防ぐこともできます。

class MyFunctionErrorLogger
{
    protected static $errors = array();

    public function setError($error)
    {
        self::$errors[] = $error;
    }

    public static function getErrors()
    {
        return self::$errors;
    }
}

または、「ハッキング」したい場合は、機能を少し拡張します。falseデフォルト値を持つ別の関数パラメーターを追加する。古い関数呼び出しはこれによる影響を受けませんが、将来の呼び出しでこの追加のパラメーターを提供できます。

function myFunction($myParam, ..., $errorsAsException = false)
{
    // ...
    // Ooops, error case
    if ($errorAsException)
        throw new WhatEverException('errormsg');
    else
        return false;
    // ...
}
于 2012-08-31T17:05:49.450 に答える