PHP Result type: comparatif des bibliothèques pour une gestion d'erreurs robuste

Posted on Jul 10, 2025

Il y a quelque temps, je partageais ma frustration sur la manière de gérer les erreurs en PHP. Entre les retours false, les null ambigus et les Exception qui éclatent comme du popcorn, j’avais le sentiment qu’on pouvait faire mieux. Beaucoup mieux.

Ma quête d’une meilleure “Developer Experience” m’a naturellement mené vers la programmation fonctionnelle et des langages comme Gleam, qui a profondément changé ma perspective. Ces langages traitent les erreurs non pas comme des accidents, mais comme des valeurs à part entière, grâce au type Result.

Le concept est simple : une fonction, au lieu de lancer une exception ou de retourner null, renvoie un objet Result qui est soit Ok(valeur) en cas de succès, soit Err(erreur) en cas d’échec. C’est explicite, prévisible et incroyablement robuste. Adopter le pattern Result en PHP permet d’améliorer significativement la gestion des erreurs et la robustesse du code.

Alors, comment importer cette sérénité en PHP ?

Le type Result en PHP : pourquoi et comment ?

Je ne suis pas le premier à vouloir ça, et heureusement ! Il existe déjà de bonnes bibliothèques dans l’écosystème PHP. On trouve principalement deux approches :

  1. L’inspiration Rust : Des bibliothèques comme prewk/result ou texthtml/maybe qui miment fidèlement l’API du type Result de Rust. Elles sont solides et efficaces.
  2. L’approche plus moderne : Des bibliothèques comme someniatko/php-result-type qui tirent parti des fonctionnalités récentes de PHP (dès 8.2) pour offrir une API plus typée et fonctionnelle.

Comparatif des approches

1. prewk/result : l’approche classique et éprouvée du type Result en PHP

C’est l’une des bibliothèques les plus anciennes et les plus stables pour la gestion des erreurs en PHP via le type Result. Son API est simple et basée sur des classes Ok et Err. Pour enchaîner des opérations qui peuvent échouer, on utilise la méthode andThen(). @todo

2. someniatko/php-result-type : l’approche moderne et typée du Result en PHP

@todo

Cette bibliothèque plus récente utilise des fonctions (ok, err) et tire pleinement parti du système de types de PHP. La méthode pour enchaîner les opérations est flatMap() (l’équivalent fonctionnel de andThen()).

Le code est très similaire à prewk/result, mais avec une esthétique plus fonctionnelle. On retrouve la même structure de closures imbriquées.

3. graham-campbell/result : une solution simple et efficace pour le Result en PHP

@todo Cette bibliothèque offre une implémentation simple et directe du type Result. Elle est souvent utilisée dans des projets Laravel grâce à son intégration facile. Son API est intuitive, utilisant des méthodes statiques pour créer des instances de Result.

Cette bibliothèque est une bonne option pour ceux qui cherchent une solution légère et facile à intégrer, notamment dans un écosystème comme Laravel.

4. hopr/result : une vision orientée “pipeline” pour la gestion d’erreurs en PHP

@todo

En créant hopr/result, mon objectif était différent. Je voulais une API qui non seulement gère les erreurs, mais qui aide à construire des pipelines de données clairs et lisibles, en s’inspirant de la fluidité de l’opérateur |> de Gleam ou Elixir.

Comparaison pratique : gestion d’erreurs et pipelines de données

@todo

Conclusion : choisir la meilleure bibliothèque Result pour votre projet PHP

Il n’y a pas de “meilleure” bibliothèque Result universelle. Le choix dépend du style de programmation que vous préférez et des exigences spécifiques de votre projet PHP. Chaque bibliothèque offre une approche unique pour la gestion des erreurs fonctionnelle et l’amélioration de la robustesse du code.