Вернитесь, внутри или снаружи Попробуйте/поймайте? - программирование
Подтвердить что ты не робот

Вернитесь, внутри или снаружи Попробуйте/поймайте?

В приведенном ниже коде 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
4b9b3361

Ответ 1

Если исключение выбрано и поймано, что возвратит функция?

У вас должен быть оператор return в блоке catch или после блока try-catch. Недостаточно иметь оператор return в try-блоке.

Ответ 2

если вы поместите оператор 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.

Ответ 3

Сообщение, которое вы получаете, является просто предупреждением, так как ваш код может ничего не возвращать. Лучший вариант сделать, как добавить возврат к вашему улову, если вы хотите остановить предупреждение.

Просто добавьте возврат перед закрывающей скобкой.

catch(Exception $e) {
    $this->error = 'Error al intentar conectar con la BD: ' . $e->getMessage();
    return null;
}