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

Jor*_*eFG 17 php try-catch

在下面的代码中,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
Run Code Online (Sandbox Code Playgroud)

Jon*_*oni 20

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

你应该在catch块中或try-catch块之后有一个return语句.仅在try-block中使用return语句是不够的.


Bri*_*yua 7

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

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

function getFilenames(){
    $response = false;

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

    }

    return $response;
}
Run Code Online (Sandbox Code Playgroud)

这样做可以确保函数始终返回所需结果或错误结果。