« $environnement = ‘produciton’ » : cette faute de frappe, invisible à l’œil dans un script pressé, ne provoque aucune erreur PHP tant que la variable reste une simple chaîne de caractères. Elle se contente de faire échouer silencieusement toute condition qui compare cette valeur à la chaîne correctement orthographiée « production », avec les conséquences que l’on imagine sur un script de déploiement.
PHP 8.1, sorti en novembre 2021, introduit les enums, un type dédié qui permet de restreindre une variable à un ensemble fini et défini de valeurs possibles. Appliqué à la notion d’environnement de déploiement, dev, recette et production, ce type élimine cette catégorie entière de bugs silencieux tout en centralisant la logique propre à chaque environnement.
Le problème des chaînes de caractères libres
Un script de déploiement construit autour de simples chaînes de caractères laisse la porte ouverte à toute faute de frappe, tout écart de casse, ou toute divergence entre deux parties du code qui ne désignent pas l’environnement exactement de la même façon :
function deployer(string $environnement): void
{
if ($environnement === 'production') {
// déploiement critique
}
}
Rien n’empêche un appel avec 'Production', 'prod' ou une faute de frappe quelconque, et PHP ne signalera aucune erreur avant l’exécution, le temps que le script échoue silencieusement à reconnaître l’environnement voulu.
Déclarer un enum backé pour les environnements
Un enum backé associe à chaque cas une valeur scalaire sous-jacente, une chaîne ici, ce qui permet à la fois de garder une correspondance lisible avec une configuration existante et de bénéficier de la vérification stricte de type apportée par le nouveau type :
enum Environnement: string
{
case Dev = 'dev';
case Recette = 'recette';
case Production = 'production';
}
La fonction de déploiement peut désormais exiger explicitement ce type, ce qui rend toute valeur invalide impossible à passer sans provoquer une erreur immédiate et explicite au moment de l’exécution :
function deployer(Environnement $environnement): void
{
if ($environnement === Environnement::Production) {
// déploiement critique
}
}
deployer(Environnement::Production);

Reconstituer un enum depuis une configuration existante
Quand la valeur d’origine provient d’un fichier de configuration ou d’une variable d’environnement système, la méthode from() permet de convertir une chaîne brute en cas d’enum, en levant une exception explicite si la valeur ne correspond à aucun cas défini :
$valeur = getenv('APP_ENV') ?: 'dev';
$environnement = Environnement::from($valeur);
Si la variable d’environnement contient une valeur mal orthographiée, cette ligne lève immédiatement une ValueError, plutôt que de laisser le script continuer silencieusement avec une valeur non reconnue. La méthode tryFrom() offre une alternative qui retourne null au lieu de lever une exception, utile quand un comportement de repli est préférable à un arrêt brutal.
Centraliser la logique propre à chaque environnement
Un enum PHP peut porter des méthodes, ce qui permet de rassembler dans un seul endroit la logique qui varie selon l’environnement, plutôt que de la disperser dans des conditions répétées à travers le script :
enum Environnement: string
{
case Dev = 'dev';
case Recette = 'recette';
case Production = 'production';
public function urlBase(): string
{
return match ($this) {
self::Dev => 'https://dev.exemple.fr',
self::Recette => 'https://recette.exemple.fr',
self::Production => 'https://exemple.fr',
};
}
public function necessiteConfirmation(): bool
{
return $this === self::Production;
}
}
Cette structuration rend le script de déploiement plus lisible : la question « que faut-il faire différemment en production » trouve une réponse unique et centralisée, plutôt que dispersée entre plusieurs fonctions qui risquent de diverger avec le temps.
- Un enum backé restreint les valeurs possibles dès la déclaration du type
- La méthode
from()convertit une configuration externe avec vérification stricte - Des méthodes propres à l’enum centralisent la logique par environnement
- Une faute de frappe devient une erreur immédiate plutôt qu’un bug silencieux
Sur nos scripts de déploiement internes, ce remplacement a éliminé un type d’incident précis, un déploiement qui se comportait comme en développement alors qu’il visait la production, à cause d’une simple divergence de casse dans une chaîne.
En résumé
Remplacer une chaîne de caractères libre par un enum backé PHP 8.1 pour représenter les environnements de déploiement transforme une faute de frappe silencieuse en erreur immédiate et explicite. Les méthodes propres à l’enum permettent en plus de centraliser la logique spécifique à chaque environnement, sans toucher à l’outil de déploiement lui-même qui orchestre ces étapes.