Как правильно обрабатывать ошибки и исключения?

Парни, верно ли я сделал простой скрипт по выводу ошибки? Получается всегда теперь оборачивать код в try/catch если метод, помимо bool, может вернуть и текст?

class Test{
  
  public function create(array $data){
    
    if(empty($data)){
      return false;
    }
    
    if(empty($data['message'])){
      throw new Exception('Сообщение не может быть пустым');
    }
    
    //save...
	
    return true;
  }
  
}

$test = new Test();

try{
  $result = $test->create(array('message' => 'v'));
  var_dump($result);
}catch(Exception $e){
  echo $e->getMessage();
}
  • Вопрос задан
  • 505 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Если я правильно понял функционал

class AppException extends Exception {}

class Test{
  public function create(array $data){
    if(empty($data['message'])){
      throw new AppException('Сообщение не может быть пустым');
    }
  }
}

$test = new Test();

try{
  $test->create(array('message' => 'v'));
  // redirect
}catch(AppException $e){
  echo $e->getMessage();
}


Идея в том, что при использовании исключений, никаких ручных проверок делать не надо. Если исключения не было - значит всё нормально. А если было, то код попросту не будет исполнен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SerafimArts
@SerafimArts
Senior Notepad Reader
Стоит разделять публичные и приватные исключения. Пользователям не стоит видеть внутреннюю кухню. Так что:
class HttpExcepton extends RuntimeException {}
class ExampleHttpException extends HttpExcepton {}

//

throw new ExampleHttpException('Сообщение не может быть пустым', 422);


Так что всё это дело можно свести к одному единственному try/catch, который будет выводить текст из всех HttpExcepton (и статус код, например, в данном примере 422), и выводить сообщения "Internal Server Error" от любых других.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы