Plutôt que de laisser un script s’arrêter brutalement quand une opération échoue — un fichier introuvable, une valeur inattendue —, PHP permet de signaler l’incident sous forme d’objet (une exception) que le code appelant peut choisir de traiter. C’est un peu comme lever la main en cours pour signaler un problème, plutôt que de quitter la salle sans explication.
Fonctionnement en PHP
On déclenche une exception avec throw new Exception('message'), et on l’intercepte avec un bloc try { ... } catch (Exception $e) { ... }. Un bloc finally optionnel s’exécute dans tous les cas, qu’une exception ait été levée ou non. PHP fournit une hiérarchie de classes (TypeError, ValueError, InvalidArgumentException…) toutes descendantes de l’interface Throwable.
Dans WordPress
Le cœur historique de WordPress évite les exceptions et préfère la classe WP_Error, retournée par des fonctions comme wp_insert_post() en cas d’échec. Les API plus récentes (REST API, certaines classes de WP_REST_Controller) et la plupart des bibliothèques Composer utilisées dans les extensions, elles, s’appuient pleinement sur les exceptions.
Exemple
try {
$resultat = 10 / $diviseur;
} catch (DivisionByZeroError $e) {
error_log('Division invalide : ' . $e->getMessage());
$resultat = 0;
}
Bon à savoir
Un bloc catch trop large (catch (\Throwable $e) partout) masque des bugs qui mériteraient de remonter. Dans une extension qui mélange du code WordPress classique et des bibliothèques externes, il est courant de convertir une exception attrapée en WP_Error avant de la faire remonter à l’utilisateur, pour rester cohérent avec les conventions du cœur.