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

Парни, верно ли я сделал простой скрипт по выводу ошибки? Получается всегда теперь оборачивать код в 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" от любых других.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽