返回,在内部还是外部尝试/捕获?

2022-08-30 14:34:59

在下面的代码中,IDE 在最后一个括号中提醒我“缺少返回语句”。这导致我在这里问,里面的回程是可以的,还是应该在外面。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

答案 1

如果抛出并捕获异常,该函数将返回什么?

应该在 catch 块中或在 try-catch 块之后有一个 return 语句。仅在 try 块中具有 return 语句是不够的。


答案 2

如果将 return 语句放在函数内的任何位置,则预计该函数必须返回一些内容,并且由于您已将 return 语句放在 try-catch 块中,因此当 IDE 计算 thw 代码时,它会注意到您没有返回语句,因为当您的尝试失败时,该语句处于捕获中。

我建议在函数顶部创建一个初始化为 false 的$response变量,然后将$filenames分配给它,然后在 try-catch 块返回$response之后。

function getFilenames(){
    $response = false;

    try{
        //your code
        $response = $filenames;
    }catch{

    }

    return $response;
}

通过这样做,您可以确保函数始终返回您需要的结果或错误的结果。


推荐