提问人:Viscountess of the Junkyard 提问时间:9/26/2023 最后编辑:LazyOneViscountess of the Junkyard 更新时间:9/27/2023 访问量:56
纠正不一致的返回点
Rectifying inconsistent return points
问:
我有一个无数的行方法,别人写了我想使用 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;
}
如果我尝试将 Branch Two 提取到自己的方法中,PhpStorm 会正确地抱怨由于提前返回而导致返回点不一致。
所以我的问题是:我如何继续对我的第一个进行早期返回,并仍然将我的详细代码提取到它自己的方法中?我考虑过抛出并抓住一个例外以提前返回,但由于在这种情况下没有任何问题,因此抛出异常感觉像是一种非常可怕的气味。HappyResponse
有没有一种简单的方法可以使这种事情起作用?
答:
0赞
Barmar
9/27/2023
#1
由于整体结构是,因此您不需要在每个分支中返回。每个分支都应该分配最后返回的变量。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(...);
评论