Une exception personnalisée est une classe qui étend Exception et porte un sens métier, par exemple StockInsuffisantException. Elle permet de distinguer les erreurs et de les traiter finement avec des catch séparés, et peut transporter des données de contexte.
Exemple
class StockInsuffisant extends Exception {}
throw new StockInsuffisant('Plus de stock');