Try, Catch et Finally
Gérer élégamment les exceptions à l’exécution avec les blocs try/catch/finally.
Try, Catch et Finally est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.
Exceptions et erreurs
PHP dispose de deux façons de signaler les problèmes :
- Erreurs — notifications, avertissements et erreurs fatales traditionnels de PHP (abordés dans la leçon précédente)
- Exceptions — objets lancés lorsqu'une situation exceptionnelle se produit ; interceptés avec try/catch
Les exceptions constituent l'approche moderne privilégiée pour gérer les erreurs récupérables.
Lever une exception
Utilisez throw pour signaler qu'un problème s'est produit :
<?php
function divide(float $a, float $b): float {
if ($b == 0) {
throw new InvalidArgumentException('Cannot divide by zero');
}
return $a / $b;
}
echo divide(10, 2); // 5
// divide(10, 0); // throws exceptionBloc try / catch
Placez le code susceptible de lancer une exception dans try et gérez les exceptions dans catch :
<?php
try {
$result = divide(10, 0);
echo $result;
} catch (InvalidArgumentException $e) {
echo 'Error: ' . $e->getMessage();
echo ' in ' . $e->getFile() . ':' . $e->getLine();
}Plusieurs blocs catch
Interceptez les différents types d'exception dans des blocs catch distincts :
<?php
try {
$pdo = new PDO($dsn, $user, $pass);
$result = performQuery($pdo);
} catch (PDOException $e) {
error_log('DB error: ' . $e->getMessage());
echo 'Database unavailable';
} catch (RuntimeException $e) {
echo 'Runtime error: ' . $e->getMessage();
} catch (\Throwable $e) {
echo 'Unexpected error: ' . $e->getMessage();
}Bloc finally
finally s'exécute qu'une exception ait été lancée ou non — il est idéal pour le nettoyage :
<?php
$connection = null;
try {
$connection = openDatabaseConnection();
$data = fetchData($connection);
} catch (DatabaseException $e) {
error_log($e->getMessage());
echo 'DB error';
} finally {
// Always runs — even if exception was thrown
if ($connection) {
closeConnection($connection);
}
}Hiérarchie des exceptions
Hiérarchie des classes d'exception de PHP :
Throwable(interface)- ├─
Error— erreurs du moteur PHP (TypeError, ParseError…) - └─
Exception— exceptions de l'application - ├─
RuntimeException - ├─
InvalidArgumentException - ├─
LogicException - └─
PDOException
Intercepter Throwable
Interceptez à la fois les exceptions et les erreurs PHP avec Throwable :
<?php
try {
$result = someFunction();
} catch (\Exception $e) {
echo 'Exception: ' . $e->getMessage();
} catch (\Error $e) {
echo 'PHP Error: ' . $e->getMessage();
}
// Or catch both at once:
try {
// ...
} catch (\Throwable $e) {
echo get_class($e) . ': ' . $e->getMessage();
}Interception par union (PHP 8)
PHP 8 permet d'intercepter plusieurs types d'exception dans un seul bloc catch :
<?php
try {
processRequest();
} catch (InvalidArgumentException | RuntimeException $e) {
echo 'Handled: ' . $e->getMessage();
}
// Compare PHP 7 approach:
// catch (InvalidArgumentException $e) { ... }
// catch (RuntimeException $e) { ... }Relancer des exceptions
Interceptez, consignez, puis relancez une exception pour la faire remonter dans la pile d'appels :
<?php
function processOrder(int $id): void {
try {
$order = loadOrder($id);
$order->process();
} catch (PaymentException $e) {
error_log('Payment failed for order ' . $id . ': ' . $e->getMessage());
throw $e; // re-throw after logging
}
}Chaînage des exceptions
Transmettez l'exception d'origine comme exception précédente afin de préserver le contexte :
<?php
try {
$data = fetchFromAPI();
} catch (NetworkException $e) {
throw new ServiceUnavailableException(
'Cannot reach upstream service',
0,
$e // $previous — preserves original cause
);
}
// Retrieve original:
// $e->getPrevious()set_exception_handler
Enregistrez un gestionnaire global pour les exceptions non interceptées :
<?php
set_exception_handler(function(\Throwable $e): void {
error_log(sprintf(
'[UNCAUGHT] %s: %s in %s:%d',
get_class($e),
$e->getMessage(),
$e->getFile(),
$e->getLine()
));
http_response_code(500);
echo 'An unexpected error occurred. Please try again.';
exit(1);
});Vérification rapide
Quel bloc de try/catch/finally est garanti de s'exécuter, qu'une exception soit lancée ou non ?
Récapitulatif : try/catch/finally
Résumé de la gestion des exceptions :
- Lancer des exceptions avec
throw new ExceptionClass() - Les intercepter avec
catch (Type $e) - Utiliser plusieurs blocs catch pour les différents types
finallys'exécute toujours — utilisez-le pour le nettoyage- Interception par union de PHP 8 :
catch (A | B $e) - Relancer une exception pour préserver le contexte de la pile d'appels
Questions Fréquemment Posées
La leçon « Try, Catch et Finally » est-elle gratuite ?
Oui — le texte complet de « Try, Catch et Finally » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Try, Catch et Finally » ?
Gérer élégamment les exceptions à l’exécution avec les blocs try/catch/finally. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer PHP Academy ?
Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Try, Catch et Finally » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?
Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Types d’erreurs PHP et signalement
- Try, Catch et Finally
- Créer des exceptions personnalisées
- Journalisation des erreurs et bonnes pratiques