以下のコードでは、IDEは、最後の括弧内の「Missing returnステートメント」について警告します。これにより、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
例外がスローされてキャッチされた場合、関数は何を返しますか?
Catchブロック内、またはtry-catchブロックの後にreturnステートメントが必要です。 tryブロックのみにreturnステートメントを含めるだけでは十分ではありません。
関数内の任意の場所にreturnステートメントを配置すると、関数は何かを返す必要があることが予想されます。また、returnステートメントをtry-catchブロック内に配置したため、IDEが評価されるときこのコードでは、試行が失敗したときに、returnステートメントがキャッチされていないことがわかります。
関数の上部でfalseに初期化された$ response変数を作成し、それに$ filenamesを割り当て、try-catchブロックの後に$ responseを返すことをお勧めします。
function getFilenames(){
$response = false;
try{
//your code
$response = $filenames;
}catch{
}
return $response;
}
そうすることで、関数が常に必要な結果またはfalseのいずれかを返すようになります。
コードは何も返さない可能性があるため、表示されているメッセージは単なる警告です。警告をやめたい場合は、キャッチにリターンを追加するのに最適なオプションです。
右中括弧の前に改行を追加するだけです。
catch(Exception $e) {
$this->error = 'Error al intentar conectar con la BD: ' . $e->getMessage();
return null;
}