Dans les grands projets PHP, la gestion des constantes est un problème qui ne peut être ignoré. Trop de constantes à code dur sont non seulement difficiles à maintenir, mais ne sont pas non plus propices à la commutation de configurations entre différents environnements. Cet article explorera comment construire un mécanisme de gestion constant flexible et centralisé via la fonction GET_DEFINED_CONSTANTS () de PHP combinée avec des constantes de variables d'environnement (telles que les fichiers .env ou les variables d'environnement du serveur) pour améliorer la maintenabilité et la configurabilité du projet.
Pendant le développement du projet, les constantes sont utilisées pour configurer les connexions de la base de données, les adresses API, les clés de chiffrement, l'identification du chemin, etc. La manière traditionnelle est généralement en définissant directement un grand nombre de constantes define () dans des fichiers de configuration ou des fichiers d'entrée:
define('API_URL', 'https://api.m66.net/v1/');
define('ENCRYPTION_KEY', 's3cr3t!');
define('APP_ENV', 'production');
Il y a plusieurs problèmes avec cette méthode:
Difficile à maintenir dans différents environnements : le développement, les tests et les environnements de production nécessitent souvent des configurations différentes.
Risque de fuite d'informations : les constantes sensibles sont exposées à la base de code.
Difficulté à trouver et à suivre : les constantes dispersées sont difficiles à gérer de manière unifiée.
La fonction GET_DEFINED_CONSTANTS () de PHP peut renvoyer toutes les constantes définies (système et défini par l'utilisateur) dans le script actuel. Utilisé en conjonction avec des espaces de noms (par préfixes), il est facile de récupérer les constantes au niveau du projet:
$constants = get_defined_constants(true);
$userConstants = $constants['user'];
foreach ($userConstants as $name => $value) {
if (strpos($name, 'APP_') === 0) {
echo "$name = $value\n";
}
}
Les avantages de cela sont:
Un type de constante peut être chargé, traversé et débogué uniformément.
Évitez la dénomination ou l'écrasement en double.
Pratique pour rédiger des journaux de débogage, générer des documents de configuration, etc.
Pour éviter les informations sensibles au code dur dans le code source, nous pouvons utiliser des variables d'environnement pour définir les constantes. Il est recommandé d'utiliser la bibliothèque Vlucas / PhpDotenv pour charger des variables d'environnement à partir de fichiers .env :
.env Fichier Exemple:
APP_ENV=production
APP_DEBUG=false
API_URL=https://api.m66.net/v1/
Chargez ces variables dans le script de démarrage PHP et définissez-les comme des constantes:
require __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
define('APP_ENV', getenv('APP_ENV'));
define('APP_DEBUG', getenv('APP_DEBUG') === 'true');
define('API_URL', getenv('API_URL'));
Grâce à la méthode ci-dessus, les variables d'environnement sont automatiquement converties en constantes PHP. Ensuite, nous pouvons utiliser get_defined_constants () pour récupérer, sortir ou mettre en cache ces informations constantes:
function getAppConstants(string $prefix = 'APP_'): array {
$all = get_defined_constants(true);
$user = $all['user'];
return array_filter($user, function($key) use ($prefix) {
return strpos($key, $prefix) === 0;
}, ARRAY_FILTER_USE_KEY);
}
Ceci est très pratique lors du débogage des problèmes de configuration, de la génération d'instantanés d'environnement et de la création de scripts de déploiement automatisé.
Pour découpler davantage le code, une classe de chargement constante automatique peut être construite, qui peut lire les variables nommées avec un préfixe spécifique dans le fichier .env et les définir automatiquement comme des constantes.
class ConstantLoader {
public static function loadFromEnv(string $prefix = 'APP_') {
foreach ($_ENV as $key => $value) {
if (strpos($key, $prefix) === 0) {
if (!defined($key)) {
define($key, $value);
}
}
}
}
}
// Comment utiliser
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
ConstantLoader::loadFromEnv();
En convertissant les variables d'environnement en constantes et en utilisant get_defined_constants () pour la gestion unifiée, la flexibilité, la maintenabilité et la sécurité d'une utilisation constante dans les projets PHP peuvent être considérablement améliorées. Cette méthode est particulièrement adaptée aux projets PHP moyens et grands avec un développement collaboratif fréquent et un changement d'environnement de déploiement CI / CD. Avec cette technologie, votre configuration de projet sera plus modulaire, traçable et plus facile à déboguer et à migrer.