在下面的代码中,IDE会在最后一个括号中提醒我“Missing return statement”。这导致我在这里询问try{}
内的返回是否正常或应该在它之外。
非常感谢。
public function getFileNamesFromKeywords( array $ids, $format ) {
try {
if(self::$dbLink) {
$ids = implode(',',$ids);
$query = 'SELECT d.id, d.wfid, d.docid , k.keyword, k.value'.
'FROM keywords k'.
'INNER JOIN documents d '.
'ON k.document_id = d.id'.
'WHERE k.document_id IN ('.$ids.')';
$results = self::$dbLink->query($query);
if( $results === false ) {
throw new Exception('Ocurrió un error al consultar a la DB.', 500);
}
$results = $results->fetchAll(PDO::FETCH_ASSOC);
$filenames = $this->buildFileNames( $results, $ids, $format );
}
else {
throw new Exception('No hay una conexión establecida con la DB.', 500);
}
return $filenames;
}
catch(Exception $e) {
$this->error = 'Error al intentar conectar con la BD: ' . $e->getMessage();
}
} //<----- Missing return statement
答案 0 :(得分:18)
如果抛出并捕获异常,该函数将返回什么?
你应该在catch块中或try-catch块之后有一个return语句。仅在try-block中使用return语句是不够的。
答案 1 :(得分:5)
如果在任何位置的函数内放置一个return语句,那么当IDE评估代码时,它预期函数必须返回一些东西,因为你已经将return语句放在try-catch块中了它注意到你没有一个关于你的尝试失败的退货声明。
我建议在函数顶部创建一个初始化为false的$ response变量,然后将$ filenames分配给它,然后在try-catch块返回$ response之后。
function getFilenames(){
$response = false;
try{
//your code
$response = $filenames;
}catch{
}
return $response;
}
通过这样做,您可以确保函数始终返回您需要的结果或错误的结果。
答案 2 :(得分:1)
您收到的消息只是一个警告,因为您的代码可能不会返回任何内容。如果您想要停止警告,最好的选择是添加回报。
只需在结束括号前添加回报。
catch(Exception $e) {
$this->error = 'Error al intentar conectar con la BD: ' . $e->getMessage();
return null;
}
答案 3 :(得分:0)
我相信一般来说 return 语句的正确位置是在 finally 部分内
function doSomenthing() {
$result = SomeDefaultValue;
try {
// code
$result = ResultValueIfEverythingIsOK;
}
catch {
// error handler code
}
finally {
return ($result);
}
}
您可以在错误处理程序代码中获得未处理的异常,然后您不能保证 return 语句将被执行,除非它在 finally 部分中。