php 纠正不一致的返回点

q0qdq0h2  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(97)

我有一个别人写的无数行的方法,我想用PhpStorm重构它。假设在高度缩写的形式下,它的基本结构看起来像这样:

myMethodName($input){
    if ($input === self::STRING_THAT_PROMPTS_ERROR) {
        //Branch One
        return new ErrorResponse('You messed up.');
    } elseif ($input === self::HAPPY_STRING_ONE) {\
        //Branch Two
        if(!$someOtherThing) {
            return new HappyResponse('Some other thing made us happy-happy.');
        }
        //We do lots of verbose stuff here and then, finally ...
        $output = new HappyResponse('some value');
    } elseif ($input === self::HAPPY_STRING_TWO) {
        //Branch Three
        //We do lots of verbose stuff here and then, finally ...
        $output = new HappyResponse('some other value');
    } else {
        //Branch Four
        return new ErrorResponse('Oh no, default.');
    } 
    return $output;
}

如果我尝试获取分支2并将其提取到自己的方法中,PhpStorm会正确地抱怨由于早期返回而导致的不一致的返回点。
所以我的问题是我如何在第一个HappyResponse中保持提前返回,并将冗长的代码提取到它自己的方法中?我考虑过抛出并捕获一个异常来实现早期返回,但由于在这种情况下没有任何错误,因此抛出一个异常感觉就像是一种非常糟糕的气味。
有没有一个简单的方法来使这种类型的工作?

ktca8awb

ktca8awb1#

由于整个结构是if/else if/...,因此您不需要在每个分支中返回。每个分支都应该分配在最后返回的$output变量。

function myMethodName($input){
    if ($input === self::STRING_THAT_PROMPTS_ERROR) {
        //Branch One
        $output = new ErrorResponse('You messed up.');
    } elseif ($input === self::HAPPY_STRING_ONE) {\
        //Branch Two
        if(!$someOtherThing) {
            $output = new HappyResponse('Some other thing made us happy-happy.');
        } else {
            //We do lots of verbose stuff here and then, finally ...
            $output = new HappyResponse('some value');
        }
    } elseif ($input === self::HAPPY_STRING_TWO) {
        //Branch Three
        //We do lots of verbose stuff here and then, finally ...
        $output = new HappyResponse('some other value');
    } else {
        //Branch Four
        $output = new ErrorResponse('Oh no, default.');
    } 
    return $output;
}

当您将分支代码移动到它自己的函数中时,该函数可以返回$output值,您将这样做

$output = new_function(...);

相关问题