<?php
class EmailSendingErrorException extends RuntimeException
{
public $message = 'Impossible d\'envoyer l\'email.';
}
class NotificationSendingErrorException extends RuntimeException
{
public $message = 'Impossible d\'envoyer la notification.';
}
class ShortText extends RuntimeException
{
public $message = 'Le texte fourni est trop court.';
}
/**
* @var string $text le contenu du message
* @return bool true en cas de succès
* @throw Exception on error
*/
function sendEmail(string $text): bool
{
if (/*envoie du message échoue*/ true)
{
throw new EmailSendingErrorException();
}
return true;
}
/**
* @var string $text le contenu du message
* @return bool true en cas de succès
* @throw Exception on error
*/
function sendNotification(string $text): bool
{
if (/*envoie de notification échoue*/ true)
{
throw new NotificationSendingErrorException();
}
return true;
}
/**
* @var string $text le contenu du message
* @return bool true en cas de succès
* @throw Exception on error
*/
function sendMessage(string $text): bool
{
if (10 > strlen($text)) {
throw new ShortTextException();
}
try {
sendNotification($text);
} catch (NotificationSendingErrorException $e) {
// Envoyez vous une alerte
// pour vous prévenir que les notifications ne marche pas ;)
} finally {
// finally permet d'exécuter du code quoi qu'il arrive :)
sendEmail($text);
// si une exception est jetée par sendEmail,
// Le return n'est jamais exécuté
return true;
}
}
try {
sendMessage('Hello, ici Greg "pappy" Boyington');
} catch (ShortTextException $e) {
echo $e->message;
} catch (EmailSendingErrorException $e) {
echo 'Une erreur est survenue lors de l\'envoie du message, nos équipes ont été prévenues, veuillez réessayer plus tard';
} catch (Exception $e) {
echo 'Une erreur inattendue est survenue, nos équipes ont été prévenues, veuillez réessayer plus tard';
}