Ответ 1
Если исключение выбрано и поймано, что возвратит функция?
У вас должен быть оператор return в блоке catch или после блока try-catch. Недостаточно иметь оператор return в try-блоке.
В приведенном ниже коде 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
Если исключение выбрано и поймано, что возвратит функция?
У вас должен быть оператор return в блоке catch или после блока try-catch. Недостаточно иметь оператор return в try-блоке.
если вы поместите оператор return внутри функции в любом месте, тогда он ожидал, что функция должна что-то вернуть, и поскольку вы разместили оператор return внутри блока try-catch, когда среда ID оценивает код thw, он замечает, что вы не имеют оператора return, когда ваша попытка не удалась, что находится в catch.
Я бы рекомендовал создать переменную $response, инициализированную false, в верхней части функции, а затем присвоить ей $filenames, после того как блок try-catch вернет ответ $.
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;
}