我有一个别人写的无数行的方法,我想用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
中保持提前返回,并将冗长的代码提取到它自己的方法中?我考虑过抛出并捕获一个异常来实现早期返回,但由于在这种情况下没有任何错误,因此抛出一个异常感觉就像是一种非常糟糕的气味。
有没有一个简单的方法来使这种类型的工作?
1条答案
按热度按时间ktca8awb1#
由于整个结构是
if/else if/...
,因此您不需要在每个分支中返回。每个分支都应该分配在最后返回的$output
变量。当您将分支代码移动到它自己的函数中时,该函数可以返回
$output
值,您将这样做